【问题标题】:django states attibuteError although attribute is assigneddjango 声明 attibuteError 尽管属性已分配
【发布时间】:2021-02-20 08:49:09
【问题描述】:

我有一个 Payment Django 模型,它有一个 CheckNumber 属性,我似乎遇到了问题,至少在 str 方法。创建 Payment 实例时,它在管理页面上工作得很好,但是当我在方法中调用它时,它给了我以下错误消息:

Request URL:    http://127.0.0.1:8000/admin/Vendor/payment/
Django Version: 3.0.7
Exception Type: AttributeError
Exception Value:    
'Payment' object has no attribute 'CheckNumber'
Exception Location: /Users/beepboop/PycharmProjects/novatory/Vendor/models.py in __str__, line 72
Python Executable:  /Users/beepboop/Environments/novatory/bin/python3.7
Python Version: 3.7.2

这是我的代码:

class Payment(models.Model):
    Vendor = models.ForeignKey(Vendor, on_delete=models.CASCADE)
    Amount = models.DecimalField(decimal_places=2, blank=True, max_digits=8)
    PaymentDate = models.DateField(name="Payment date", help_text="Day of payment")
    CheckNumber = models.IntegerField(name="Check number", help_text="If payment wasn't made with check, leave blank", blank=True)

    def __str__(self):
        return f"Vendor: {self.Vendor.Name} | Amount: {prettyPrintCurrency(self.Amount)} | Checknumber: {self.CheckNumber}"

我绝对喜欢关于错误原因的任何 cmets/建议

【问题讨论】:

  • 使用小写和下划线而不是驼峰式命名模型的属性是一个很好的 Python 实践。在 Django 中,模型属性名称区分大小写,如果您的表没有 CheckNumber 字段,它将不会迁移并且无法使用。验证您的字段实际上已正确迁移到他们的表中。
  • 这可能有助于您的编码风格:docs.djangoproject.com/en/3.1/internals/contributing/…
  • 嗨,dmitryro,我尝试正确更改名称,但产生了同样的错误

标签: python django web backend


【解决方案1】:

在我看来,您最近在Payment 模型中引入了CheckNumber 字段,没有进行迁移。确保您运行迁移,然后您可以使用以下命令执行此操作。

python manage.py migrate

这将在Payment 表中创建一个新字段。希望这能解决您的问题。 请清理数据库,然后运行迁移命令。

要清理数据库,您需要编写以下命令(不要在生产中运行此命令):

python manage.py flush

清理后,您可以使用以下命令进行初始迁移:

python manage.py makemigrations

然后将这些更改迁移到数据库表中:

python manage.py migrate

【讨论】:

  • 嗨,Javed,感谢您的建议,不幸的是,我已经这样做了,但没有解决错误
【解决方案2】:

原来,当你在模型字段中传递一个name值时,它会改变字段的名称,我个人认为在Django中显示时会改变名称行政。我的解决方法是删除 name 值并迁移,这为我修复了它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-02
    • 2022-01-15
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    相关资源
    最近更新 更多