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