您需要启用 Django 支持。去
PyCharm -> 首选项 -> 语言和框架 -> Django
然后检查 Enable Django Support
您还可以显式公开默认模型管理器:
from django.db import models
class Foo(models.Model):
name = models.CharField(max_length=50, primary_key=True)
objects = models.Manager()
models.Manager()
,并且它具有不破坏 PyCharm CE 的额外好处。是否公开默认模型管理器 un-pythonic?
from django.db import models
。
为所有暴露对象的模型使用基本模型:
class BaseModel(models.Model):
objects = models.Manager()
class Meta:
abstract = True
class Model1(BaseModel):
id = models.AutoField(primary_key=True)
class Model2(BaseModel):
id = models.AutoField(primary_key=True)
我使用存根文件发现了这个 hacky 解决方法:
模型.py
from django.db import models
class Model(models.Model):
class Meta:
abstract = True
class SomeModel(Model):
pass
模型.pyi
from django.db import models
class Model:
objects: models.Manager()
https://i.stack.imgur.com/8YoXZ.png
这类似于 Campi 的解决方案,但避免了重新声明默认值的需要
我发现的另一个解决方案是将 @python_2_unicode_compatible 装饰器放在任何模型上。它还要求你有一个 str 实现四个你的函数
例如:
# models.py
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class SomeModel(models.Model):
name = Models.CharField(max_length=255)
def __str__(self):
return self.name