【问题标题】:Django unicode with recursive ForeignKey带有递归外键的 Django unicode
【发布时间】:2015-03-06 15:43:13
【问题描述】:

所以我有一个班级 - 部门。

每个部门(除了最大的部门)都有一个更大的部门。

我的班级看起来像这样:

class Department(models.Model):
    name = models.CharField(max_length=100)
    overDep = models.ForeignKey('self', blank=True, null=True)

我想创建 def __unicode__ 它将返回比“-”和更大的部门名称的部门名称,因此结果可能看起来像:“BUSS-AEPR-ERPG”,因为 ERPG 是最大的部门,其中包括包括 BUSS 的 AEPR。

我不知道该怎么做,我试图返回:'self.name+"-"+self.overDep.name' 但它给出了一个 AttributeError - 'NoneType' 对象没有属性 'name'

所以请告诉我如何正确地做,谢谢。

【问题讨论】:

    标签: python django unicode foreign-keys


    【解决方案1】:

    试试这个:

    def __unicode__(self):
        if self.overDep:
            return u'%s - %s' % (str(self.overDep), self.name)
        else:
            return self.name
    

    【讨论】:

    • DjangoUnicodeDecodeError at /admin/faxim/department/ 'ascii' 编解码器无法解码位置 0 的字节 0xd7:序数不在范围内 (128)。你传入了 () 这就是我在尝试你的解决方案后得到的结果。
    • @Tomer我看看编辑后的答案,尝试在字符串前添加 u 字符
    • 谢谢,你是最棒的!.. 你能解释一下为什么我的选择不起作用而你的选择起作用吗?
    • @tomerl 不客气,我的选项有效,因为我首先检查了 overDep 列是否已填充(否则尝试获取 name 属性,您会得到 AttributeError - 'NoneType' 对象没有属性' name'),并且我还通过调用str(self.overDep) 实现了此处所需的递归。事实上,将对象转换为字符串意味着调用相同的 unicode 函数,并且递归发生直到被调用的 overDep 没有父级并且只返回其名称。如果答案对您确实有用,您可以接受。
    猜你喜欢
    • 2021-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 1970-01-01
    相关资源
    最近更新 更多