@gromyko21

NOT NULL constraint failed: chat_message.chat_id?

Сделал форму для сообщений между пользователями(по аналогии моей же работающей формы для комментариев). И почему-то выходит эта ошибка. Ссылок по такой ошибке достаточно, но ничего из предложенного мне не помогло. Так же уже пытался и бд с миграциями удалять и заново ставить - ничего. Прописывал в поле chat nall=True, blank = True так же все мимо.
Моя модель(тут кстати буду благодарен, если кто скинет хотя бы что-то о том как корректно писать логику для чатов)
class Chat(models.Model):
    DIALOG = 'D'
    CHAT = 'C'
    CHAT_TYPE_CHOICES = (
        (DIALOG, 'Dialog'),
        (CHAT, 'Chat')
    )
    type = models.CharField( 'Тип',max_length=1,choices=CHAT_TYPE_CHOICES,default=DIALOG )
    slug = models.SlugField(unique=True)

    def get_absolute_url(self):
        return reverse('private_chat_url', kwargs={'slug': self.slug })


class Message(models.Model):
    chat = models.ForeignKey(Chat, verbose_name="Чат", on_delete=models.CASCADE)
    author = models.ForeignKey(User, verbose_name="Отправитель", on_delete=models.CASCADE)
    recipient = models.ForeignKey(User, related_name='received_messages', 
                           verbose_name="Получатель", on_delete=models.CASCADE, default=0)
    message = models.TextField("Сообщение")
    pub_date = models.DateTimeField('Дата сообщения', default=timezone.now)
    is_readed = models.BooleanField('Прочитано', default=False)


Вью
def private_chat(request, slug):
    pr_chat = get_list_or_404(Chat, slug__iexact=slug)
    body_chat = Message.objects.order_by('pk')

    if request.method == 'POST':
        message_form = MessageForm(request.POST)
        if message_form.is_valid():
            message_form.instance.author = request.user
            message_form.instance.post = pr_chat
            message_form.save()
            return redirect(pr_chat)
        else:
            HttpResponseNotFound("<h2>Введены неверные данные</h2>")
    else:
        message_form = MessageForm()
    return render(request, 'chat/private_chat.html', {'pr_chat': pr_chat,
                                                      'body_chat': body_chat,
                                                      'message_form': message_form,
                                                      })

форма
class MessageForm(forms.ModelForm):

    message = forms.CharField()

    class Meta:
        model = Message
        fields = ('message',)

Ну и форма в шаблоне
<form method="post">
    {% csrf_token %}
    {{ message_form }}
    <button type="submit" style="margin-top:1%; margin-bottom:1%; width:215px;" class="btn btn-outline-primary">Добавить</button>
</form>
  • Вопрос задан
  • 463 просмотра
Пригласить эксперта
Ответы на вопрос 2
levi-german
@levi-german
...
message_form.instance.post = pr_chat

а где поле модели post?
Ответ написан
damirazo
@damirazo
Software developer
Вы писали именно nall=True в поле модели или null=True? Верно последнее только. После изменения модели нужно сгенерить миграцию и накатить ее.

python manage.py makemigrations
python manage.py migrate
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы