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
Похоже, что значение 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')
...