Ошибка DRF created_by updated_by во время миграции

#django-models #django-rest-framework

Вопрос:

Я хочу добавить поле created_by и updated_by во все мои объекты БД. Я создал для этого общую модель, которая будет использоваться большинством других объектов. До сих пор я разобрался с большинством препятствий. Но сценарий выполнения миграции заканчивается ошибкой:

Моя модель:

 class CommonModel(models.Model): """Common fields that are shared among all models."""   created_by = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.PROTECT,  editable=False, related_name=" ")  updated_by = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.PROTECT,  editable=False, related_name=" ")  created_at = models.DateTimeField(auto_now_add=True,  editable=False)  updated_at = models.DateTimeField(auto_now=True,  editable=False)  class Meta:  abstract = True  class Tag(CommonModel): """Tag to be used for device type"""  name = models.CharField(max_length=255)   def __str__(self):  return self.name  

Ошибка, которую я получаю, такова :

Вы пытаетесь добавить ненулевое поле «created_by» в тип устройства без значения по умолчанию; мы не можем этого сделать (базе данных нужно что-то для заполнения существующих строк). Пожалуйста, выберите исправление:

  1. Теперь укажите одноразовое значение по умолчанию (будет установлено для всех существующих строк с нулевым значением для этого столбца).
  2. Выйдите и позвольте мне добавить значение по умолчанию в models.py

Единственное «решение», которое я нашел в Интернете, состояло в том, чтобы определить значение по умолчанию=», снова запустить изменения, а затем вручную отредактировать файлы, чтобы удалить значение по умолчанию=». Я не могу поверить, что это правильный способ сделать это и что для этого пока нет решения.

Комментарии:

1. Это не ошибка. Он просто спрашивает, что ему следует делать с created_by существующими записями. default='' вообще не имеет смысла: это строка, ForeignKey которая принимает только пользовательский объект или первичный ключ пользовательского объекта.

Ответ №1:

Вам нужно установить значение по умолчанию для created_at и update_at , поскольку это не null=True так .

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

 Please enter the default value now, as valid Python The datetime and ` modules are available, so you can do e.g. timezone.now Type 'exit' to exit this prompt gt;gt;gt;   

Здесь вы можете установить значение по умолчанию с помощью модуля datetime или django.utils.timezone .

Комментарии:

1. Спасибо тебе и Уильяму. Я не осознавал, что не очистил базу данных во время тестирования приложения.