Django Integrity Error 1048 cannot be null

Под views.py

def addcomments(request):
    comment_text = request.POST.get('comment')
    user_id = request.POST.get('user_id')
    name = request.POST.get('name')
    email = request.POST.get('email')
    
    comment = Comment.objects.create(user_id=user_id, body=comment_text, name=name, email=email)
    comment.save()
    return HttpResponseRedirect(reverse('users:detail', args=(user_id, )))
   

вот этот, из файла detail.html

{% extends 'base.html' %}

{% block title %}
    {{ user.user_fname }} {{ user.user_lname }}
{% endblock %}

{% block content %}

{% if error_message %}
    <p class="alert alert-danger">
        <strong>{{error_message}}</strong>
    </p>
{% endif %}


<div class="row">

    <div class="col-lg-6">
        <div class="mb-5">
            <h1>{{ user.user_fname }} {{ user.user_lname }}</h1>
            <p class="text-muted">{{ user.user_email }}</p>
            <p>Position: {{ user.user_position }}</p>
        </div>
        
        <div class="img-responsive">
            <img src="/users/media/{{user.user_image}}" alt="profile_user" class="img-rounded" width="300">
            <!-- ito yung hinahanap ng search engine-->
        </div>
        
        <div class="btn-group mt-5">

            <a href="{% url 'users:delete' user.id %}" class="btn btn-sm btn-danger">Delete</a>
            <a href="{% url 'users:edit' user.id %}" class="btn btn-sm btn-info">Edit</a>
            <a href="{% url 'users:index'%}" class="btn btn-sm btn-success">Back</a>
    
        </div>  
    </div>
        
    <div class="col-lg-6">
        <h2>Comment</h2>
        <p class="text-muted"> Number of comment : {{ comments_count }}</p>
        {% if comments_count > 0 %}
            {% for comment in comments %}
                {% if comment.active %}
                <p><strong>{{comment.name}}</strong> : {{comment.body}}</p>
                {% endif %}

            {% endfor %}
        {% endif %}

        <hr>
        <br><br><br><br><br><br>

        <form action="{%url 'users:addcomments'%}" method="post">
            
            {% csrf_token %}
            <div class="form-group">
                <label>Comment</label>
                <textarea name="comment" id="comment" cols="30" rows="5" class="form-control" required placeholder="Enter your comment here ..."></textarea>
            </div>
            
            <br>
            <input type="text" name="name" id="name" value="{{ user.user_lname }}">
            <input type="text" name="lname" id="lname" value="{{ user.user_fname }}">
            <input type="text" name="email" id="email" value="{{ user.user_email }}">
            <br><br><br><br>
            <button type="submit" class="btn btn-sm btn-primary">Add Comment</button>
        </form>
    </div>
</div>


{% endblock %}

этот для url.py

path('addcomments', views.addcomments, name='addcomments'),

У меня сообщение об ошибке,

<

Во время обработки вышеуказанного исключения ((1048, "Column 'user_id' cannot be null")) произошло другое исключение:

из 404 users\views.py, строка 146, в addcomments comment = Comment.objects.create(user_id=users_id, body=comment_text, name=name, email=email) ... Локальные переменные Значение переменной comment_text
'wwerwr' email
'HeavyRain@gmail.com' имя
'Heavy' запрос <WSGIRequest: POST '/users/addcomments'> идентификатор пользователя None

детали тяжести, не обращайте внимания, пробовал всякие штуки

У вас нет поля user_id в html-форме, поэтому она становится None или null, а поскольку вы не позволяете вашему user_id быть никаким (не позволяете ему быть никаким), django не может создать ее. Я предлагаю вам избавиться от user_id при создании и поискать пользователя с точно таким же уникальным именем пользователя, который разместил форму с

user = request.user
comment = Comment.objects.create(user=user, body=comment_text, name=name, email=email)
<
from django import forms

class CommentForm(forms.ModelForm):
    class Meta:
        model = Comment
        fields = [...]

Посмотрите дополнительную информацию в документации.

Простите, но используйте типовую форму. Это наиболее подходящее решение. Она справится с рендерингом вашей формы в html и обеспечит чистоту и валидацию данных.

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