【问题标题】:Why use __unicode__(self) method for django 1.7+? [closed]为什么对 django 1.7+ 使用 __unicode__(self) 方法? [关闭]
【发布时间】:2015-11-08 22:43:55
【问题描述】:

我是 django 和 sql 的新手。我正在阅读的教程将def __unicode__(self) 放在每个模型类上?这是对documentation的引用,但即使阅读后我仍然不明白目的是什么?

class Project(models.Model):
    name = models.CharField(max_length=300)

    def __unicode__(self):
        return self.name

class Task(models.Model):
    description = models.CharField(max_length=300)
    project = models.ForeignKey(Project)

    def __unicode__(self):
        return self.description

【问题讨论】:

  • 您对文档中的描述有什么不明白的地方?对我来说似乎很清楚。
  • 因此,无论您在模板中使用unicode(instance) 还是{{ instance }},都会调用该方法,因为仅使用__str__ 无法生成Unicode。您对具体的哪些部分有问题?
  • @MartijnPieters 我只是不知道模型如何存储数据。我猜def将存储的模型数据转换为前端模板的unicode?​​span>
  • @MatthewHarwood:当您需要对象的 unicode 字符串表示时,您可以使用 unicode(object) 并调用该方法。它的职责是简单地返回一个很好地代表该对象的unicode 值。例如,它用于管理界面。

标签: python django migration


【解决方案1】:

这个想法是,当您打印 {{Project}} 时,您基本上只会得到一堆没有真正信息的垃圾。

def __Unicode__(self):

这定义了您打印的内容,因此 {{Project}} 将显示对象的描述。哪个对你更有用。

【讨论】:

  • awesome so def __unicode__(self): 将模型转换为模板的 unicode 正确吗?
  • 是的,但请注意,您无法比较它们...例如 {{project.description}} != {{project}} 即使 {{project}} 将显示完全相同的字符串作为 {{project.description}}
  • @xElsa:当然可以;如果 __unicode__ 返回 self.description 那么你有 完全相同的 Unicode 对象
  • @MartijnPieters 除了,您没有比较 Unicode 对象。只是看起来你是。您实际上是在将一个对象与一个字符串进行比较。
  • @xElsa:没错,但unicode(project) == project.description 仍然如此。
猜你喜欢
  • 2020-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-11
  • 2017-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多