【问题标题】:Django model.foreignKey and return self.text errorsDjango model.foreignKey 并返回 self.text 错误
【发布时间】:2023-03-07 13:28:01
【问题描述】:

所以我正在处理 Django 中的 model.py,但我遇到了 2 个 pylint 错误。 我不明白为什么?这是 pylint 的问题还是我在代码中做错了什么。

E1120:No value for argument 'on_delete' in constructor call    
E1136:Value 'self.text' is unsubscriptable
  • 第一个在第 19 行,在 Entry 中 topic = models.ForeignKey(Topic)

  • 第二个在第24行self.text[:50]

如果我删除入口类,代码就可以工作

from django.db import models

# Create your models here.
class Topic(models.Model):
"""A topic the user is learning about"""
text = models.CharField(max_length=200)
date_added = models.DateTimeField(auto_now_add=True)

def __str__(self):
    """Return a string representation of the model."""
    return self.text

class Entry(models.Model):
"""Something specific learned about a topic"""
topic = models.ForeignKey(Topic)
text = models.TextField()
date_added = models.DateTimeField(auto_now_add=True)

class Meta:
    verbose_name_plural = "entries"

def __str__(self):
    """Return a string representation of the model."""
    return self.text[:50] + "..."

【问题讨论】:

标签: python django python-3.x


【解决方案1】:

问题是 Django 1.9 中的 ForeignKey 在 Django 2.0 中需要 1 个位置参数 ForeignKey 2 需要位置参数

  topic = models.ForeignKey("Topic", on_delete=models.PROTECT)

【讨论】:

  • 我面临同样的问题。您是如何解决“self.text is unsubscriptable”问题的?这个答案不能解决这个问题。
  • 我删除了设置编号并将其留空。不理想,但有效。
  • 我看到你正在学习“Python 速成课程”。选的好。自己用过。 return self.text[:50] + "..." 不起作用的原因是 Python 无法将 self.text 识别为字符串(因为它实际上是 models.TextField),因此它不知道如何解释 [:50] 或如何将其与 @ 连接987654326@。当您摆脱它知道将其转换为字符串的其他内容时,这就是有效的原因。要使其按预期工作,请尝试return str(self.text)[:50] + "..."。这样self.text 现在以字符串形式表示,您可以对其执行字符串操作。
【解决方案2】:

第二个问题的原因是你错过了命令python manage.py makemigrations [appname]之后的命令,缺少的命令是python manage.py migrate

【讨论】:

    【解决方案3】:

    为了防止这种情况,我们应该使用on_delete=models.PROTECT

    默认情况下,Django 使用on_delete=models.CASCADE,但如果对象被意外删除,这是不安全的。

    在这种情况下,不会有删除对象的通知,因此最好使用 models.PROTECT。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-20
      • 1970-01-01
      • 1970-01-01
      • 2018-11-14
      • 1970-01-01
      • 2011-07-27
      • 2015-04-17
      • 2013-06-03
      相关资源
      最近更新 更多