Django ссылка не значение поля на уровне базы данных - PullRequest
1 голос
/ 05 ноября 2019
class Author(models.Model):
    ...


class Book(models.Model):
    author = models.ForeignKey(Author)
    book_seq = models.PositiveIntegerField()

    class Meta:
        unique_together = ('author', 'book_seq')

    def create_book_for_author(cls, author):
        book_seq = Book.objects.filter(author=author).count() + 1
        Book.objects.create(author=author, book_seq=book_seq)

Есть ли способ сослаться на это book_seq = Book.objects.filter(author=author).count() + 1 на уровне базы данных, потому что если эта строка одновременно, то уникальное ограничение не будет выполнено, а второе, достигшее базы данных с запросом на вставку, потерпит неудачу. Я знаю, что одним из вариантов является транзакция, но есть ли другой способ? F() объект работает только с конкретным полем, а не с запросом к базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...