如何使用新属性注释所有对象?

时间:2011-10-13 04:21:03

标签: python django

class Author(Model):
    state = models.CharField('ST')

class Essay(Model):
    authors = models.ManyToManyField("Author",
        through='EssayAuthor')

>> mylist 
[ <Essay: A1>, <Essay: B4>, <Essay: C9>, <Essay: A3> ... ]

mylist是QuerySet。 我想使用Essay的{​​{1}}为mylist中的state的每个实例添加另一个属性。假设具有多个作者的书籍的状态是等同的。因此,对于一篇有2位作者的论文,使用哪个作者并不重要。

因此,我希望能够做到这一点:

Author

>> essay0 = mylist[0] >> essay0.state 'AK' 方法仅对数值/浮点值有用;所以我不能用它。如果我使用生成器来注入属性,我该如何重构QuerySet?

1 个答案:

答案 0 :(得分:1)

你能在模型类中做到这一点吗?

class Essay(Model):
    authors = models.ManyToManyField("Author",
        through='EssayAuthor')

    @property
    def state(self):
        if self.authors.count():
            return self.authors[0].state
        else:
            return null

在这种情况下,我认为你不能动态地注释你的查询集,尤其是“只使用一个作者,如果有多个”逻辑。另一种选择是使用extra()为这些附加数据构建更复杂的SQL查询。