2016-04-17 3 views
1

Мне нужно добавить ForeignKey в поле модели, но makemigrations возвращает ошибку, чтобы установить значение по умолчанию. Но я не буду использовать значение по умолчанию.Django добавить поле, отличное от нуля (ForeignKey)

Например

@python_2_unicode_compatible 
class Doctor(models.Model): 
    name = models.CharField(max_length=250) 
    surname = models.CharField(max_length=250) 
    middlename = models.CharField(max_length=250) 
    city = models.CharField(max_length=250) 
    specialization = models.ForeignKey('Specialization', blank=True) 

    def __str__(self): 
     return "%s %s" % (self.name, self.surname) 

@python_2_unicode_compatible 
class Specialization(models.Model): 
    name = models.CharField(max_length=250) 
    #spec_table_name = models.ForeignKey('SpecializationTable') 

    def __str__(self): 
     return self.name 

class Consultation(models.Model): 
    client_id = models.ForeignKey('Client') 
    doctor_id = models.ForeignKey('Doctor') 

    #how to dropdown from doctor 
    #record_id = models.ForeignKey(Specialization) 

@python_2_unicode_compatible 
class SpecializationTable(models.Model): 
    name = models.CharField(max_length=250) 

    def __str__(self): 
     return self.name 

class SpecializationTableRow(models.Model): 
    row_name = models.CharField(max_length=250) 
    row_description = models.CharField(max_length=999) 
    row_required = models.BooleanField() 
    table_name = models.ForeignKey(SpecializationTable) 

То есть модель у меня уже есть, когда я пытаюсь раскомментировать ForeignKey в Specialization - ошибка appers. Если я удалю все миграции и начну с нуля - ошибок не будет.

И кроме того - у меня нет записей вообще (чистый дБ).

Как передать эту ошибку и не уронить \ create db с нуля?

+0

укажите 'blank = True' в это поле. –

+0

@MuhammadShoaib, но все сказали, что поле «null» в Db - movetone. Если мне нужно добавить поля в крайнем случае, должно быть много «пустых». Есть ли другой путь? – kAldown

ответ

0

Проблема с точки зрения django заключается в том, что она должна знать, что делать с существующими записями модели Specialization. Он не может знать, что их нет.

Если у вас чистый дБ, как вы говорите, вы можете отключить миграцию до точки, в которой создается модель. Давайте предположим, что Specialization создается в миграции под названием 0003_*, вы можете позвонить:

> python manage.py migrate <app_name> 0002 

После этого вы можете удалить все файлы миграции в приложение, начиная с 0003. Затем снова будет работать makemigrations. Если он будет создан в 0001, вы должны сделать:

> python manage.py migrate <app_name> zero 

Это, как говорится, по умолчанию вы предоставляете во время makemigrations не сохраняется в любом случае (она будет применяться только к существующим записям во время migrate). Итак, если у вас есть пустая база данных, предоставление любого значения (например, 1) не будет иметь никакого эффекта.

+0

Я сделал почти то же самое, за исключением того, что я не знал про «нуль», поэтому спасибо. Но представьте, я работаю над производством, могу ли я сделать этот трюк? Я думаю, нет, изменяя поля с «нулевым» значением и плохой опорой. Я полностью понимаю, что это мой фаул, чтобы не думать о архитектуре хорошо, но эй, почему нет решения с низкой стоимостью боли? – kAldown

+0

Здесь не может быть никакой боли. Представьте себе, что в производстве, если у вас уже есть записи, и вы добавляете поле, отличное от нуля, в какой-то момент вам придется решить, какое значение вы хотите предоставить этим записям ... – schwobaseggl

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