PyCharm中类“”的属性引用“objects”未解析

8mmmxcuj  于 2023-01-13  发布在  PyCharm
关注(0)|答案(7)|浏览(326)

我使用社区pycharm,python的版本是3.6.1,django的版本是1.11.1。这个警告对运行没有影响,但是我不能使用IDE的自动完成功能。

uelo1irk

uelo1irk1#

我发现了这个使用存根文件的笨拙变通方法:
models.py

from django.db import models

class Model(models.Model):
    class Meta:
        abstract = True

class SomeModel(Model):
    pass

models.pyi

from django.db import models

class Model:
    objects: models.Manager()

这将启用PyCharm的代码完成:

这类似于Campi的解决方案,但避免了重新声明默认值的需要

rqenqsqc

rqenqsqc2#

我发现的另一个解决方案是在任何模型上放置@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
tag5nh1u

tag5nh1u3#

您可以尝试安装django-stubs

pip install django-stubs
rqmkfv5c

rqmkfv5c4#

您需要启用Django支持。转到

PyCharm -〉首选项-〉语言和框架-〉Django

然后检查 * Enable Django Support *

vaqhlq81

vaqhlq815#

您也可以显式地公开默认的模型管理器:

from django.db import models

class Foo(models.Model):
    name = models.CharField(max_length=50, primary_key=True)

    objects = models.Manager()
n6lpvg4x

n6lpvg4x6#

对所有公开对象的模型使用基本模型:

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)
deyfvvtc

deyfvvtc7#

Python框架(Django,Flask等)仅在专业版中支持。查看下面的链接以了解更多详细信息。
PyCharm Editions Comparison

相关问题