Как использовать сгенерированные поля Django для получения одного значения из отношения "многие-ко-многим"?
У меня есть модель Django, представляющая книгу, которая может иметь множество различных типов персон, включая АВТОРА, РЕДАКТОРА, ИЛЛЮСТРАТОРА и т.д.
class PersonType(models.Model):
name = models.CharField()
class Person(models.Model):
name = models.TextField()
class Book(models.Model):
title = models.TextField()
people = models.ManyToManyField(Person, through="PersonBook")
class PersonBook(models.Model):
person_type = models.ForeignKey(PersonType, on_delete=models.CASCADE)
person = models.ForeignKey(Person, on_delete=models.CASCADE)
book = models.ForeignKey(Book, on_delete=models.CASCADE)
Я надеялся использовать новые GeneratedFields от Django для создания свойства Book
с именем author, которое могло бы запрашивать отношения многие-ко-многим и устанавливать значение, равное первому Person
с "AUTHOR" PersonType
. Я уверен, что есть другие способы сделать это с помощью менеджеров и т.д., но мне интересно, как я могу сделать это с помощью новых GeneratedFields в Django, если это вообще возможно.
В документации по выражению Django Query expressions не показано ни одного примера по отношениям, поэтому я не уверен, что там можно что-то сделать.
Как документировано GeneratedField.expression
Выражения должны быть детерминированными и ссылаться только на поля внутри модели (в одной и той же таблице базы данных)
Ниже приведена основная реализация сгенерированных колонок (GENERATED ALWAYS AS
)