2015-04-20 3 views
4

Я использовал модель наследования в своем проекте после смены модели; но я даю ошибку с нулевым полем. Что мне делать? Я использую 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 
+1

Чтобы наследовать от 'Вопросы' в' TypeFive', Django необходимо добавить отношение из 'TypeFive' ​​в' Questions'. Для всех записей в TypeFive, которые уже могут быть в базе данных, Django теперь не знает, к какому вопросу должен относиться «TopFive». Это то, о чем вас просит команда «migrate». У вас есть несколько вариантов, но они в значительной степени зависят от вашего варианта использования и находятся ли вы в раннем развитии или есть производственная база данных, в которой эта миграция должна выполняться позже. – sthzg

+1

Я нахожусь в раннем развитии и запускаю его на локальном хосте, поэтому мне не нужны мои записи. Теперь, что мне делать? – altruistic

ответ

4

Чтобы унаследовать от Questions в TypeFive, Django нужно добавить отношение от TypeFive к Questions. Для всех записей в TypeFive, которые могут быть уже в базе данных.

Django теперь не знает, к какому вопросу он должен относиться TopFive. Это то, о чем вам просит команда migrate. У вас есть несколько вариантов, но они в значительной степени зависят от вашего варианта использования и находятся ли вы в раннем развитии или есть производственная база данных, в которой эта миграция должна выполняться позже.

Я нахожусь на ранней стадии разработки и запускаю его на локальном хосте, поэтому мне все равно о моих записях. Теперь, что мне делать?

В этом случае у вас есть не так много, чтобы беспокоиться о том, когда migrate попросит вас ввести 1, а затем нажмите enter. Теперь добавьте primary key экземпляра Questions, который находится в вашей базе данных, а затем снова нажмите enter.

Django теперь относится ко всем TypeFive экземплярам, ​​которые в настоящий момент находятся в базе данных по этому вопросу, поэтому вам может потребоваться очистить их после этого (например, отредактировав TypeFive в администраторе Django).

+3

Но если таблица вопросов не выходит? – altruistic

+0

Я нашел этот пост, и это было полезно для того, что я искал. Если вы пытаетесь полностью абстрагировать свой класс. set abstract = True в подклассе Meta: Ссылка: http://stackoverflow.com/questions/26780098/django-models-common-ancestor-inheritance-migration –

Смежные вопросы