#python #django
#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
in mylist с state
Author
помощью (ов) . Предполагается, что состояния для книг с более чем одним автором эквивалентны. Таким образом, для эссе с 2 авторами не имеет значения, какой автор используется.
Таким образом, я хочу иметь возможность делать это:
>> essay0 = mylist[0]
>> essay0.state
'AK'
annotate
Метод полезен только для числовых / плавающих значений; поэтому я не могу его использовать. Если я использую генератор для введения свойства, как я могу восстановить набор запросов?
Ответ №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-запроса для этих дополнительных данных.