Python 非空约束失败:blog\u userpost.user\u id
我试图创造一种方式让人们发布他们的想法,但却给了我一个错误: NOTNULL约束失败:blog\u userpost.user\u id。我希望用户必须注册并登录才能制作/阅读帖子 views.py:Python 非空约束失败:blog\u userpost.user\u id,python,django,Python,Django,我试图创造一种方式让人们发布他们的想法,但却给了我一个错误: NOTNULL约束失败:blog\u userpost.user\u id。我希望用户必须注册并登录才能制作/阅读帖子 views.py: #create view @login_required(login_url='login') def userposts_create_view(request): form= UserPostForm(request.POST or None) if request
#create view
@login_required(login_url='login')
def userposts_create_view(request):
form= UserPostForm(request.POST or None)
if request.method == "POST":
if form.is_valid():
form = form.save()
form.save()
return HttpResponseRedirect("/Blog/posts/")
context= {'form': form,
}
return render(request, 'posts/userposts-create-view.html', context)
#list view
@login_required(login_url='login')
def userposts_list_view(request):
allposts= UserPost.objects.all()
context= {'allposts': allposts,
}
return render(request, 'posts/userposts-list-view.html', context)
#detail view
@login_required(login_url='login')
def userposts_detail_view(request, url=None):
post= get_object_or_404(UserPost, url=url)
context= {'post': post,
}
return render(request, 'posts/userposts-detail-view.html', context)
models.py
这是我希望帖子拥有的类别,我可以“创建”帖子,但每当我提交帖子时,就会出现错误
User= settings.AUTH_USER_MODEL
class UserPost(models.Model):
user= models.ForeignKey(User, null=False,editable=False, verbose_name='Usuario', on_delete=models.CASCADE)
title= models.CharField(max_length=500)
content= models.TextField()
categories = models.ManyToManyField(Category, verbose_name='Categorias', blank=True,related_name="articles")
created_at = models.DateTimeField(auto_now_add=True, verbose_name='Creado el ')
updated_at = models.DateTimeField(auto_now=True, verbose_name='Actualizado el ')
def save(self, *args, **kwargs):
super(UserPost, self).save(*args, **kwargs)
forms.py
from django import forms
from .models import UserPost
class UserPostForm(forms.ModelForm):
class Meta:
model= UserPost
fields= ["title", "content","categories"]
一种简单的方法是使用模型的管理器,而不是
form.save()
。因此,在您的情况下(即,如果form.is\u valid()),您可以使用以下内容:
def userposts_create_view(request):
form= UserPostForm(request.POST or None)
if form.is_valid():
data = form.cleaned_data
categories = data.pop('categories', None)
user_post = UserPost.objects.create(**data, user=request.user)
if categories:
user_post.categories.add(*categories)
return HttpResponseRedirect("/Blog/posts/")
context= {'form': form}
return render(request, 'posts/userposts-create-view.html', context)
现在是给我这个错误,我不明白。异常值:禁止直接分配到多对多集合的前端。改为使用categories.set()。