“str”的 Pylint Django 模型实例没有成员

Hoe*_*nie 8 django pylint python-3.x

我正在为我的 Django 项目使用pylint-django,我的模型之一如下:

class Registration(models.Model):
    date_added = models.DateTimeField(auto_now_add=True)
    event = models.ForeignKey(Event, on_delete=models.CASCADE)
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)

    def __str__(self):
        first_name = self.user.first_name
        last_name = self.user.last_name
        return f'{first_name} {last_name}'
Run Code Online (Sandbox Code Playgroud)

运行pylint,我收到以下警告:

events/models.py:61:21: E1101: Instance of 'str' has no 'first_name' member (no-member)

从 pylint-django 的自述文件中,我了解到这是一个已知问题:

“如果您通过名称(作为字符串)引用外键模型,pylint-django 可能无法找到该模型并且会报告问题,因为它不知道该字段的基础类型是什么。”

我的问题是:我应该怎么做才能解决这个问题?我不想压制所有C0111警告。

非常感谢您的帮助!

PS:我正在使用 pylint-django 作为对使用 Pylint 与 Django 的回答

Wil*_*sem 7

您可以抑制某个代码的警告:

class Registration(models.Model):
    date_added = models.DateTimeField(auto_now_add=True)
    event = models.ForeignKey(Event, on_delete=models.CASCADE)
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)

    def __str__(self):
        # pylint: disable=E1101
        first_name = self.user.first_name
        last_name = self.user.last_name
        return f'{first_name} {last_name}'
Run Code Online (Sandbox Code Playgroud)

因此,在这里您只能禁用E1101该特定__str__方法。如果您想在同一块中重新启用错误,您可以#pylint: enable=E1101在块的末尾写下您希望抑制E1101警告的位置。