Как решить эту проблему, не предоставляя значения по умолчанию? - PullRequest
0 голосов
/ 14 июня 2019

Когда я пытаюсь запустить make-миграции python3 manage.py, он показывает: вы пытаетесь добавить необнуляемое поле 'topic_id' в trip_template без значения по умолчанию;мы не можем этого сделать (базе данных нужно что-то для заполнения существующих строк).Пожалуйста, выберите исправление: 1) Укажите одноразовое значение по умолчанию (будет установлено во всех существующих строках с нулевым значением для этого столбца) 2) Выйдите и позвольте мне добавить значение по умолчанию в models.py Выберите параметр:

enter code here

from django.db import models

class Topic_Table(models.Model):
    topic_id=models.IntegerField(primary_key=True)
    topic_name = models.CharField(max_length=100, blank=True)
    weightage = models.CharField(max_length=15, blank=True)
    grade = models.IntegerField( null=True)
    subject = models.CharField(max_length=100, blank=True)
    sequence = models.IntegerField(null=True)
    month = models.CharField(max_length=15, blank=True)

class Journey_template(models.Model):
    student_id = models.IntegerField(default=1)
        topic_id = models.ForeignKey('Topic_Table',on_delete=models.CASCADE)    
    subtopic_id = models.IntegerField()
    journey_template_key = models.IntegerField(primary_key=True)    

Как бы это исправить?

Ответы [ 2 ]

0 голосов
/ 14 июня 2019

Если в вашей таблице уже есть данные, добавление необнуляемого столбца без какого-либо значения по умолчанию нарушит ненулевое ограничение. Миграция Django не проверяет таблицу на наличие данных, поэтому она предполагает, что они есть.

Если в вашей таблице нет строк, вы можете указать любое допустимое значение по умолчанию. Значение по умолчанию не меняет вашу модель, оно просто дает Django значение, которое он может заполнить. Поскольку в таблице нет строк данных, это не будет иметь никакого эффекта, кроме как сделать Django счастливым.

Если в вашей таблице есть строки, то, если вы можете придумать разумное значение для заполнения существующих строк, используйте его. Другой вариант - изменить модель, добавив в поле null = True, и Django просто вставит в это поле пустые значения для существующих строк. (Позже вы можете поместить свои собственные значения в эти поля с помощью Django или других методов и изменить поле обратно на null = False, если хотите. Вы получите тот же вопрос при переносе, но ответ не будет иметь эффекта, если поля не нулевые). null = False - значение по умолчанию для любого поля в вашей модели.

0 голосов
/ 14 июня 2019

Вы добавляете поле topic_id в модель Journey_template.

Эта модель уже содержит данные в вашей базе данных.

У вас есть несколько вариантов:

1 - укажите значение по умолчанию (например, ввод числа 1)

2 - удалите базу данных и начните новую миграцию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...