Django多重继承避免方法冲突

时间:2020-02-03 07:31:39

标签: django

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

实例化BookReview时,默认值是什么?我将使用article_piece,book_piece的哪个实例?

1 个答案:

答案 0 :(得分:0)

此消息显示您为Article模型所用,没有指定字段article_piece可能是数据库中的NULL。因此,Django要求您提供默认值(基本上将任何Piece记录分配给该字段)或由您自己管理。

如果不希望出现此情况,则只需将该字段设置为空即可(也可以为空,这样表格就不需要此字段了):

article_piece = models.OneToOneField(Piece, blank=True, null=True, on_delete=models.CASCADE, parent_link=True)