【问题标题】:django __unicode__: \n and manytomany?django __unicode__: \n 和 manytomany?
【发布时间】:2014-03-10 01:45:14
【问题描述】:
Class NickName(models.Model):
    name = models.CharField()

    def __unicode__(self):
        return unicode(self.name)

Class Bob(models.Model):

    bob_nickname = models.ManyToManyField(NickName)

    def __unicode__(self):
        return unicode(self.bob_nickname)

编号 1。如何让 Bob 类的 __unicode__ 显示实际的 FK 名称,而不是 <django.db.models.fields.related.ManyRelatedFieldsManager Object at 0Xdsfjk>

编辑:简单地做 self.bob_nickname.all() 似乎工作正常。它不是很漂亮,但它显示了信息:[<NickName: Ron>,<NickName: Randy>]

数字 2。另外,我怎样才能让 def __unicode__ 不逃逸 \n?我想创建一个多行 unicode 字符串

谢谢!

【问题讨论】:

  • 正如您所发现的,Model.manyToManyField 显示了一个管理器,而不是实例,因此您可以在进行数据库查询之前执行一些花哨的操作,例如过滤结果 如果您想访问对象,当然,迭代相关对象并构造您想要的字符串。请注意,您需要查看prefetch_related,因为您将在每个 unicode 调用中进行数据库查询(打印 100 个结果将导致 101 个查询)
  • 关于你的转义问题,看看这个问题:stackoverflow.com/questions/267436/…

标签: python django django-admin


【解决方案1】:

你为什么不使用values_list 来获取所有相关的昵称作为列表?

class Bob(models.Model):
    bob_nickname = models.ManyToManyField(NickName)

    def __unicode__(self):
        return u'\n'.join(self.bob_nickname.values_list('name', flat=True))

【讨论】:

    猜你喜欢
    • 2012-03-04
    • 1970-01-01
    • 2011-06-26
    • 2011-02-08
    • 2013-04-10
    • 1970-01-01
    • 2014-12-07
    • 2011-09-01
    • 1970-01-01
    相关资源
    最近更新 更多