Django.db.utils.IntegrityError: NOT NULL constraint failed: Eid_Post_name.massenger_name

У меня такая проблема "django.db.utils.IntegrityError: NOT NULL constraint failed: Eid_Post_name.massenger_name "

и эти мои коды

views.py

from .models import Name
# Create your views here.

def Home(request):
    name_input = request.POST.get('user_name')

    name_in_model = Name(massenger_name=name_input,)
    name_in_model.save()

    return render(request , 'index.html')

и этот models.py

from datetime import datetime
# Create your models here.

class Name(models.Model):
    massenger_name = models.CharField(max_length=50)
    action_time = models.DateTimeField(default=datetime.now)

    def __str__(self):
        return self.massenger_name

и этот index.html

<!DOCTYPE html>
<html lang="en" dir="rtl">
  <head>
    <meta charset="utf-8">
    <title></title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-0evHe/X+R7YkIZDRvuzKMRqM+OrBnVFBL6DOitfPri4tjfHxaWutUpFmBp4vmVor" crossorigin="anonymous">
    {% load static %}
    <link rel="stylesheet" href="{% static 'CSS/style.css' %}">
  </head>
  <body>
    <div id="form">
      <form class="row" method="POST">
          <div class="">
            <input type="textarea" class="form-control" placeholder="أكتب أسمك (مثلا/أخوكم عبدالله العتيبي)" id="text_name" name="user_name">
          </div>
          <div class="col-auto">
            <button type="submit" class="btn btn-primary mb-3" id="button">حمل الصورة</button>
          </div>
      </form>
    </div>

  </body>
</html>

Вы пытаетесь создать строку Name без поля messager_name, которое по умолчанию является обязательным полем при использовании CharField. Вам необходимо сделать это поле нулевым:

massenger_name = models.CharField(max_length=50, null=True)

Вам нужно makemigrations и migrate применить изменения. Это позволит вам иметь строку Name без строки messager_name.

Пожалуйста, не используйте .get(…) [Django-doc], он глушит ошибку, когда ключ отсутствует, что имеет место в данном случае.

Вы должны проверить, какой метод используется, и в случае POST запроса обработать его должным образом:

from django.shortcuts import redirect
from .models import Name
# Create your views here.

def Home(request):
    if request.method == 'POST':
        Name.objects.create(massenger_name=request.POST['user_name'])
        return redirect(Home)
    return render(request , 'index.html')

В модели имеет смысл использовать auto_now_add=True [Django-doc] для action_time:

class Name(models.Model):
    massenger_name = models.CharField(max_length=50)
    action_time = models.DateTimeField(auto_now_add=True)
    # …

Note: In case of a successful POST request, you should make a redirect [Django-doc] to implement the Post/Redirect/Get pattern [wiki]. This avoids that you make the same POST request when the user refreshes the browser.


Примечание: Функции обычно пишутся в snake_case, а не PascalCase, поэтому следует рекомендуется переименовать вашу функцию в home, а не Home.

Вернуться на верх