Python Django:inspectdb生成的模型无objects属性智能提示问题
objects Manager IntelliSense for InspectDB-Generated Django Models Hey there! I’ve dealt with this exact frustration before when working with models created via python manage.py inspectdb—it’s super annoying when your editor won’t pick up the default objects manager for your models, even though everything runs fine at runtime. Let’s break down practical solutions tailored to your setup (Python 3.6, MySQL, Django):
1. Explicitly Declare the objects Manager with Type Hints
Django automatically adds the objects manager to every Model subclass, but older Python versions like 3.6 and editors can’t always infer its existence if it’s not written out explicitly. Adding a typed declaration for objects will make your editor recognize it immediately.
Here’s how to update one of your models:
from django.db import models from django.db.models.manager import Manager class YourModel(models.Model): # Your auto-generated fields go here (e.g., id = models.IntegerField(primary_key=True)) username = models.CharField(max_length=100, unique=True) # Explicitly define the objects manager with a type hint objects: Manager['YourModel'] = models.Manager() class Meta: managed = False db_table = 'your_table_name'
The string 'YourModel' is a forward reference—since we’re referencing the class itself inside its definition, Python 3.6 needs this to avoid circular import errors.
2. Use django-stubs for Better Type Support
Even with explicit declarations, getting full Django-specific IntelliSense often requires dedicated type stubs. django-stubs is a package that adds type hints for Django’s core code, and it works with Python 3.6 (just make sure to install a compatible version).
Steps to set it up:
- Install the required packages (versions compatible with Python 3.6):
pip install django-stubs==1.12.0 mypy==0.910 - Create a
mypy.inifile in your project root directory with these settings:[mypy] plugins = mypy_django_plugin.main [mypy.plugins.django-stubs] django_settings_module = your_project_name.settings - Restart your editor (like VS Code) and enable Mypy as your type checker—your models’
objectsmanager should now show up in IntelliSense.
3. Double-Check Model Inheritance
Quickly verify that all your inspectdb-generated models are properly inheriting from models.Model. While rare, inspectdb can generate edge cases (like abstract models) if your database schema has unusual setups, and non-Model subclasses won’t get the default objects manager.
4. Consider Upgrading Python (If Possible)
Python 3.6 reached end-of-life in 2021, and newer versions (3.8+) have much better type inference support, paired with improved type hinting in modern Django releases. If you can upgrade your Python version, it’ll not only fix this IntelliSense issue but also give you access to security updates and new features.
Hope one of these solutions gets your IntelliSense working smoothly! If you hit any snags with setup or have questions about a specific step, feel free to ask.
内容的提问来源于stack exchange,提问作者Michele Schelfi

