Вы пытаетесь добавить ненулевое поле «post» в поток без значения по умолчанию; мы не можем этого сделать

#python #django #signals

Вопрос:

У меня есть models.py

   class Stream(models.Model):

        following = models.ForeignKey(User, on_delete=models.CASCADE, 
        related_name='stream_following')
        user = models.ForeignKey(User, on_delete=models.CASCADE)
        post = models.ForeignKey(Post, on_delete=models.CASCADE)
        date = models.DateTimeField()
 

и функции

   def add_post(sender, instance, *args, **kwargs):

    post = instance 
    user = post.user 
    followers = Follow.objects.all().filter(following=user)
    for follower in followers:
        stream = Stream(post=post, user=follower.follower, date=post.posted, following=user)
        stream.save()
 

когда я пытаюсь командовать py manage.py макемиграции
У меня есть проблема.

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

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

Как это решить? Я поставил smth по умолчанию. Однако в функции add_post я добавил дату=сообщение.опубликовано Спасибо!

Ответ №1:

вероятно, вы изменили свои модели, пока в них уже есть данные

вы могли бы выбрать либо:

a. удалите данные из этой модели и повторно выполните миграцию,или

б. удалите миграции и файлы sqlite и повторите миграции,или

c. выберите «Предоставить одноразовое значение по умолчанию сейчас», набрав 1, и просто добавьте случайный существующий идентификационный номер(но это может испортить ваши данные), или

d. добавьте пробел=True,null=True ко всем полям в ваших моделях и повторите миграцию,

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

1. Спасибо, братан, я выбрал b (удалить миграции), и теперь это работает.

2. рад помочь :), вы можете принять приглашение и/или проголосовать за него,