【问题标题】:Pylint Django model instance of 'str' has no member“str”的 Pylint Django 模型实例没有成员
【发布时间】:2019-11-22 23:03:01
【问题描述】:

我在我的 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}'

运行 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 回答 Using Pylint with Django

【问题讨论】:

    标签: django python-3.x pylint


    【解决方案1】:

    您可以禁止对某个代码发出警告block

    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}'

    因此,您将只为特定的__str__ 方法禁用E1101。如果您想在同一个块中重新启用错误,您可以在块的末尾写上#pylint: enable=E1101,以消除E1101 警告。

    猜你喜欢
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多