当我尝试发布新帖子时,我收到"django.db.utils.IntegrityError:列"user_id"中的空值违反了非空约束"



-这是我关于StackOverflow的第一个问题。因此,如果我违反了任何社区规则/标准,我深表歉意。虽然周围有类似的问题,但没有答案帮助我解决了我遇到的问题。我会说我不够好,无法找出解决方案---

当我点击发布添加新帖子时,出现以下错误

"django.db.utils.IntegrityError: 列 "user_id" 中的空值 违反非空约束 详细信息:失败行包含 (18, s, s, 2019-05-26 15:39:10.466636+00,空)">

我试过通过....ForeignKey('auth.User')和...ForeignKey(get_user_model()帖子模型(不知道它如何帮助我的问题。

我将数据库从sqlite迁移到PostgreSQL,然后在PgAdmin上检查Post表以查看user_id(以前称为author_id)是否存在。

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
from django.urls import reverse
from django.contrib.auth import get_user_model
User = get_user_model()
class Post(models.Model):
user = models.ForeignKey(User, related_name='posts', on_delete=models.CASCADE)
title = models.CharField(max_length=200)
text = models.TextField()
published_date = models.DateTimeField(auto_now=True)
def __str__(self):
"""String representation"""
return self.title
def get_absolute_url(self):
"""Returns the url to access a detailed post"""
return reverse('post-detail', kwargs={"pk": self.pk})
class Meta:
ordering = ['-published_date']
unique_together = ('user',)

和视图文件:

class CreatePostView(CreateView):
model = Post
template_name = 'blog/addpost.html'
fields = ('title', 'text')

以下是回溯:

Environment:

Request Method: POST
Request URL: http://127.0.0.1:8000/blog/addpost
Django Version: 2.2.1
Python Version: 3.7.2
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog',
'django.contrib.humanize']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']

Traceback:
File "C:UsersychnkDesktopayancikist_projectvenvlibsite-packagesdjangodbbackendsutils.py" in _execute
84.                 return self.cursor.execute(sql, params)
The above exception (null value in column "user_id" violates not-null constraint
DETAIL:  Failing row contains (18, s, s, 2019-05-26 15:39:10.466636+00, null).
) was the direct cause of the following exception:
File "C:UsersychnkDesktopayancikist_projectvenvlibsite-packagesdjangocorehandlersexception.py" in inner
34.             response = get_response(request)
File "C:UsersychnkDesktopayancikist_projectvenvlibsite-packagesdjangocorehandlersbase.py" in _get_response
115.                 response = self.process_exception_by_middleware(e, request)
File "C:UsersychnkDesktopayancikist_projectvenvlibsite-packagesdjangocorehandlersbase.py" in _get_response
113.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:UsersychnkDesktopayancikist_projectvenvlibsite-packagesdjangoviewsgenericbase.py" in view
71.             return self.dispatch(request, *args, **kwargs)
File "C:UsersychnkDesktopayancikist_projectvenvlibsite-packagesdjangoviewsgenericbase.py" in dispatch
97.         return handler(request, *args, **kwargs)
File "C:UsersychnkDesktopayancikist_projectvenvlibsite-packagesdjangoviewsgenericedit.py" in post
172.         return super().post(request, *args, **kwargs)
File "C:UsersychnkDesktopayancikist_projectvenvlibsite-packagesdjangoviewsgenericedit.py" in post
142.             return self.form_valid(form)
File "C:UsersychnkDesktopayancikist_projectvenvlibsite-packagesdjangoviewsgenericedit.py" in form_valid
125.         self.object = form.save()
File "C:UsersychnkDesktopayancikist_projectvenvlibsite-packagesdjangoformsmodels.py" in save
458.             self.instance.save()
File "C:UsersychnkDesktopayancikist_projectvenvlibsite-packagesdjangodbmodelsbase.py" in save
741.                        force_update=force_update, update_fields=update_fields)
File "C:UsersychnkDesktopayancikist_projectvenvlibsite-packagesdjangodbmodelsbase.py" in save_base
779.                 force_update, using, update_fields,
File "C:UsersychnkDesktopayancikist_projectvenvlibsite-packagesdjangodbmodelsbase.py" in _save_table
870.             result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
File "C:UsersychnkDesktopayancikist_projectvenvlibsite-packagesdjangodbmodelsbase.py" in _do_insert
908.                                using=using, raw=raw)
File "C:UsersychnkDesktopayancikist_projectvenvlibsite-packagesdjangodbmodelsmanager.py" in manager_method
82.                 return getattr(self.get_queryset(), name)(*args, **kwargs)
File "C:UsersychnkDesktopayancikist_projectvenvlibsite-packagesdjangodbmodelsquery.py" in _insert
1186.         return query.get_compiler(using=using).execute_sql(return_id)
File "C:UsersychnkDesktopayancikist_projectvenvlibsite-packagesdjangodbmodelssqlcompiler.py" in execute_sql
1335.                 cursor.execute(sql, params)
File "C:UsersychnkDesktopayancikist_projectvenvlibsite-packagesdjangodbbackendsutils.py" in execute
99.             return super().execute(sql, params)
File "C:UsersychnkDesktopayancikist_projectvenvlibsite-packagesdjangodbbackendsutils.py" in execute
67.         return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
File "C:UsersychnkDesktopayancikist_projectvenvlibsite-packagesdjangodbbackendsutils.py" in _execute_with_wrappers
76.         return executor(sql, params, many, context)
File "C:UsersychnkDesktopayancikist_projectvenvlibsite-packagesdjangodbbackendsutils.py" in _execute
84.                 return self.cursor.execute(sql, params)
File "C:UsersychnkDesktopayancikist_projectvenvlibsite-packagesdjangodbutils.py" in __exit__
89.                 raise dj_exc_value.with_traceback(traceback) from exc_value
File "C:UsersychnkDesktopayancikist_projectvenvlibsite-packagesdjangodbbackendsutils.py" in _execute
84.                 return self.cursor.execute(sql, params)
Exception Type: IntegrityError at /blog/addpost
Exception Value: null value in column "user_id" violates not-null constraint
DETAIL:  Failing row contains (18, s, s, 2019-05-26 15:39:10.466636+00, null).

我使用 Django 创建了迷你博客来练习基于类的视图,并更熟悉编码和 django 环境。我遵循了非常相似的步骤,但没有遇到这样的错误。

编辑: 这是附加帖子.html

{% extends "base.html" %}
{% block content %}
<form action="{% url 'add-post' %}" method="POST">
{% csrf_token %}
<ul>
<p>{{request.user}}</p>is adding a post:
<li>
<label for="title">Post Title</label>
<input type="text" name="title" value="" required>
<label for="text">Post text</label>
<input type="text" name="text" value="">
<button type="submit" name="button">Publish</button>
<a href="{% url 'blog-view' %}">
<button type="submit" name="button">Cancel & Go Back</button>
</a>
</li>
</ul>
</form>
{% endblock %}

尝试创建时似乎没有将用户传递给 Post,但用户是必填字段。 您可以覆盖form_valid方法。

class CreatePostView(CreateView):
model = Article
template_name = 'blog/addpost.html'
fields = ('title', 'text')
def form_valid(self, form):
form.instance.user= self.request.user
return super(CreatePostView, self).form_valid(form)

最新更新