使用模型继承和不可空字段错误计数

alt*_*tic 6 python django inheritance django-models python-3.x

改模型后我在我的项目中使用了继承模型;但我给出了不可为空的字段错误。我该怎么办? 我正在使用 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)
Run Code Online (Sandbox Code Playgroud)

迁移后:

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
Run Code Online (Sandbox Code Playgroud)

sth*_*hzg 6

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

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

我处于早期开发阶段并在本地主机上运行它,所以我不关心我的记录。现在,我该怎么办?

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

Django 现在TypeFive将当前在数据库中的所有实例与此问题相关联,因此您可能必须在事后清理它(例如,通过TypeFive在 Django admin 中编辑)。

  • 但是如果问题表没有退出呢? (4认同)
  • 我找到了这篇文章,它对我正在寻找的东西很有帮助。如果你试图_only_抽象你的类。在子类 Meta 中设置抽象 = True:链接:http://stackoverflow.com/questions/26780098/django-models-common-ancestor-inheritance-migration (2认同)