将模型与User链接时,NOT NULL约束失败

时间:2015-11-16 04:12:56

标签: python django

我有一个模特:

class UserProfile(models.Model):
    user = models.OneToOneField(User)

    first_name = models.CharField(max_length=30, default='anon')
    last_name = models.CharField(max_length=30, default='anon')
    interest = models.CharField(max_length=30, default='nothing')

    def __str__(self):
        return 'Username:%s' % self.user.username


class Post(models.Model):
    title = models.TextField(default='No title')
    text = models.TextField(max_length=220)
    vote = models.IntegerField(default=0)

    user_post = models.ForeignKey(User, related_name='post')

class Comments(models.Model):
    name = models.TextField(default='Anon', null=True)
    comment = models.TextField(max_length=2000, null=True)
    post = models.ForeignKey(Post)

    def __str__(self):
        return 'comment:%s' % self.comment

在帖子中,您可以看到我将帖子与用户关联起来。我读到你可以使用user.post_set.all()以这种方式访问​​用户评论,所以我试了一下。当我尝试迁移更改(在Post中添加foriegn键)时,我收到错误。

django.db.utils.IntegrityError: NOT NULL constraint failed:  
boardapp_post__new.user_post_id

我注意到post__new,所以这里是我的名为new的视图,它会创建一个帖子。

def new(request):
    if request.method == 'POST':
        post =     Post.objects.create(title=request.POST.get('post_title', ''),
        text=request.POST.get('post_text',''),vote=0

    )
        return HttpResponseRedirect(reverse('view_post', args=(post.id,)))
    return render(request, 'new.html')

我是在django中创建用户的新手,并且对于null null consraint失败的地方感到困惑。感谢

2 个答案:

答案 0 :(得分:0)

迁移到新的数据库格式时,对于已存在的css,应该有一个默认的User。 Django会尝试在现有的user_post中为您填写此值,但它不知道要选择哪个值,因为当前模型中不允许user_post
因此:你需要告诉Django 1)不要担心没有用户的帖子(null)或2)提供默认的null = True,这有点难(可能需要一个函数调用在运行中创建一些虚拟User

因此,最简单的解决方案是更改User模型并更改Post

user_post

答案 1 :(得分:0)

它失败了,因为你的模型字段是

user_post = models.ForeignKey(User, related_name='post')

这意味着每个帖子都将分配给用户(非空字段)。 在您看来,您没有将任何用户分配到帖子,因此请将代码更改为

post = Post.objects.create(title=request.POST.get('post_title', ''),
    text=request.POST.get('post_text',''), vote=0, user_post=request.user

)