更改模型后,我在项目中使用了继承模型。但我给出了不可为空的字段错误。我应该怎么办?
我正在使用Django 1.7

class Questions(models.Model):
    question_category = models.ForeignKey(Course, blank=False)
    question_author = models.ForeignKey(Author, blank=False)
    question_details = models.CharField(max_length=100, blank=False, default='')
    timestamp = models.DateTimeField(auto_now_add=True)

class TypeFive(Questions):
    question_title = models.CharField(max_length=100, blank=False, default=generator(5), unique=True, editable=False)

    def __str__(self):
        return "{}".format(self.question_title)


class TypeFiveChoice(models.Model):
    question_choice = models.ForeignKey(TypeFive)
    is_it_question = models.BooleanField(default=False)
    word = models.CharField(default='', blank=False, max_length=20)
    translate = models.CharField(default='', blank=False, max_length=20)
    timestamp = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return "{} : {}, {}".format(self.question_choice, self.word, self.translate)

迁移后:
You are trying to add a non-nullable field 'questions_ptr' to typefive 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)
 2) Quit, and let me add a default in models.py

最佳答案

为了从Questions中的TypeFive继承,Django需要添加一个从TypeFiveQuestions的关系。对于TypeFive中可能已经存在于数据库中的所有记录。

Django现在不知道应该将TopFive与哪个问题相关联。这就是migration命令的要求。您有几种选择,但是它们很大程度上取决于您的用例以及您是否处于早期开发阶段,或者是否有生产数据库必须在以后运行此迁移。



在这种情况下,当migrate要求您键入1然后按enter时,您不必担心。现在,添加数据库中primary key实例的Questions,然后再次点击enter

Django现在将与数据库中当前存在的所有TypeFive实例相关联,因此您可能需要在此之后进行清理(例如,通过在Django admin中编辑TypeFive)。

10-01 21:03