Как использовать сгенерированные поля 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)

Вернуться на верх