IntegrityError at /Hod/Staff/Save_Notification NOT NULL constraint failed: app_staff_notification.message in DJANGO

Я не уверен, что проблема в models.py или в значениях, которые я ввожу в html-код. Изначально была какая-то проблема с миграцией моделей, но я ее решил.

models.py

class Staff_Notification(models.Model):
    staff_id = models.ForeignKey(Staff, on_delete=models.CASCADE)
    message = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.staff_id.admin.first_name

urls.py

path('Hod/Staff/Send_Notification', Hod_Views.STAFF_SEND_NOTIFICATION, name='staff_send_notification'),
path('Hod/Staff/Save_Notification', Hod_Views.SAVE_STAFF_NOTIFICATION, name='save_staff_notification'),

Hod_Views.py

def SAVE_STAFF_NOTIFICATION(request):
    if request.method=='POST':
        staff_id = request.POST.get('staff_id')
        message = request.POST.get('message')
        staff = Staff.objects.get(admin = staff_id)
        notification = Staff_Notification(
            staff_id = staff,
            message = message,
        )
        notification.save()
        return redirect('staff_send_notification')

staff_notification.html

Ошибка: image description

Похоже, что значение message, которое вы пытаетесь сохранить, пустое (то есть None), а ваше поле не допускает None или NULL. Вы уверены, что ввели текст при отправке HTML-формы в модале?

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

def SAVE_STAFF_NOTIFICATION(request):
    if request.method=='POST':
        staff_id = request.POST.get('staff_id')
        # in case there is no 'message', here we use an empty string instead of 'None'
        # by adding a second argument to '.get()'
        message = request.POST.get('message', '')
        if len(message) == 0:
            messages.error(request, 'message cannot be empty')
            return redirect('staff_send_notification')
        ...
Вернуться на верх