NOT NULL约束失败:blog_userpost.user_id [英] NOT NULL constraint failed: blog_userpost.user_id

查看:67
本文介绍了NOT NULL约束失败:blog_userpost.user_id的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试为人们提供一种发表想法的方法,但是却给了我这个错误:NOT NULL约束失败:blog_userpost.user_id.我希望用户必须注册并登录才能发表/阅读帖子.

Im trying to create a way for people to post their ideas but is giving me this error: NOT NULL constraint failed: blog_userpost.user_id. I want the user to have to be registered and login in order to make/read the posts.

views.py:

    #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

models.py

这是我希望帖子包含的类别,我可以创建"帖子,但是每当我提交它都会给我错误.

This are the categories I want the post to have, I can 'create' the post but whenever I submit it gives me the error.

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().因此,在您的情况下(即 if form.is_valid()),您可以使用类似以下内容的方法:

One simple way is to use model's manager instead of form.save(). So in your condition (i.e. if form.is_valid()) you can use something like:

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)

这篇关于NOT NULL约束失败:blog_userpost.user_id的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆