【问题标题】:Django models question: does not return model string representation nameDjango模型问题:不返回模型字符串表示名称
【发布时间】:2011-05-04 10:55:12
【问题描述】:

您好,我的模型似乎有问题。在我看来,我无法命名字符串表示名称。在 python shell 中,我得到了一个 Payment 对象。

[<Payment: Payment object>, <Payment: Payment object>]

这是我的模型。如果我可以删除我定义 line_total 的位置,它应该会更简单,但正如您已经知道的那样,一旦您生成了表格,编辑模型就不是那么简单了。

class Payment(models.Model):
    unit_price = models.DecimalField(max_digits=12, decimal_places=2)
    discount = models.DecimalField(max_digits=12, decimal_places=2)
    payment_terms = models.CharField(max_length=80)
    amount = models.DecimalField(max_digits=12, decimal_places=2)
    line_total = models.DecimalField(max_digits=12, decimal_places=2)

    def line_total():
        unit_price -= discount 
        return line_total

        def __unicode__(self):
            return self.line_total

【问题讨论】:

  • 您的代码有很多问题需要修复:unit_priceline_total 都在 line_total() 方法中声明。此外,line_total 是一个类方法,将采用 self 参数。

标签: django string unicode django-models


【解决方案1】:

__unicode__() 上的缩进不正确。它应该与line_total()处于同一级别。

【讨论】:

  • 我需要做什么样的改变?
  • 您需要将其缩进到与line_total() 相同的级别。
  • 在尝试使 unicode 缩进到同一行“渲染时捕获 OperationalError:(1054,“字段列表中的未知列 'accounts_payment.line_total' '")"
  • 那是因为它不是一个字段;这是一种方法。
  • 那么您的表中没有该字段。既然您似乎并不想要它,请删除字段定义。
【解决方案2】:

当您的模型在列表中打印时,调用的不是 __unicode__ 方法,而是 __repr__(您通常也可以使用比 __unicode__ 更简单的输出来实现该方法)

【讨论】:

【解决方案3】:

好的,看来我要保持这种方式。我删除了 line_total 字段,因为第一个原因,我真的不需要它,第二个原因是不知何故,没有为 accounts_payment.line_total 创建列。所以在我的mysql数据库中。我现在也做了它,所以它返回一个 unit_price 而不是一个对象。无论如何谢谢大家帮助我。

【讨论】:

  • 您为什么接受自己的答案作为最佳答案?坦率地说,这根本不是一个答案。您在代码中留下了其他人在 cmets 中指出的错误。就像 line_total 的重叠字段名称和方法名称一样。所以你的答案不应该被接受。
猜你喜欢
  • 1970-01-01
  • 2015-06-18
  • 1970-01-01
  • 2012-08-30
  • 1970-01-01
  • 2013-04-13
  • 2016-07-03
  • 1970-01-01
  • 2022-06-12
相关资源
最近更新 更多