Django избегать множественного наследования, конфликт методов - PullRequest
0 голосов
/ 03 февраля 2020
class Piece(models.Model):
    pass

class Article(Piece):
    article_piece = models.OneToOneField(Piece, on_delete=models.CASCADE, parent_link=True)
    ...

class Book(Piece):
    book_piece = models.OneToOneField(Piece, on_delete=models.CASCADE, parent_link=True)
    ...

class BookReview(Book, Article):
    pass

Я смотрю на некоторую документацию, там сказано, что приведенный выше код можно использовать для предоставления дополнительных полей и методов BookReview без каких-либо конфликтов. Я получаю сообщение об ошибке You are trying to add a non-nullable field 'article_piece' to article without a default; we can't do that (the database needs something to populate existing rows). Please select a fix: 1) Provide a one-off default now (will be set on all existing rows with a null value for this column) 2) Quit, and let me add a default in models.py Select an option: 2

Что бы по умолчанию даже быть и какой экземпляр article_piece, book_piece я бы использовал при создании экземпляра BookReview?

1 Ответ

0 голосов
/ 03 февраля 2020

Это сообщение показало, что для модели Article не указано, что поле article_piece может быть NULL в вашей базе данных. Таким образом, Django просит вас предоставить значение по умолчанию (в основном, назначить любую запись Piece этому полю) или управлять этим самостоятельно.

Если это не ожидалось, тогда просто разрешите этому полю быть нулевым ( также пустым, чтобы формы не требовались):

article_piece = models.OneToOneField(Piece, blank=True, null=True, on_delete=models.CASCADE, parent_link=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...