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

2024-05-18 09:39:14 发布

您现在位置:Python中文网/ 问答频道 /正文

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。 我想用Authorstate向mylist中Essay的每个实例添加另一个属性。假设有多个作者的书的状态是等价的。因此,对于一篇有两位作者的文章,使用哪位作者并不重要。你知道吗

因此,我希望能够做到:

>> essay0 = mylist[0]
>> essay0.state 
'AK'

annotate方法只对数值/浮点值有用;所以我不能使用它。如果使用生成器注入属性,如何重建QuerySet?你知道吗


Tags: model属性models作者authorsclassauthorqueryset
1条回答
网友
1楼 · 发布于 2024-05-18 09:39:14

你能在模特课上做这个吗?你知道吗

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

在这种情况下,我不认为您可以动态地对queryset进行注释,特别是使用“如果有多个作者,则只使用一个作者”逻辑。另一种选择是使用extra()为这些额外的数据构造一个更复杂的SQL查询。你知道吗

相关问题 更多 >