第二次保存模型对象时出现IntegrityError

时间:2014-04-29 10:58:00

标签: python django django-models sqlite django-forms

我有一个将OneToOneField发布到用户模型的Post模型

class Post(models.Model):
    user = models.OneToOneField(User)
    title = models.CharField(max_length=255)
    content = models.TextField()
    date = models.DateField(auto_now_add = True)

    def __unicode__(self):
         return self.title

当我添加新帖子(使用表单)时,一切正常。但是当我添加第二篇帖子传递同一个用户时,我收到UNIQUE constraint failed: socnet_post.user_id错误。

我使用自定义身份验证后端:

from django.contrib.auth.models import User

class EmailAuthBackend(object):
    def authenticate(self, username=None, password=None):
        try:
            user = User.objects.get(email=username)
            if user.check_password(password):
                return user
        except User.DoesNotExist:
            return None
    def get_user(self, user_id):
        try:
            return User.objects.get(pk=user_id)
        except User.DoesNotExist:
            return None

异常来自post.save()行:

@login_required
def profile(request, username=None):
    context = RequestContext(request)

    if not username:
        username = request.user.username

    user = User.objects.get(username=username)
    posts = Post.objects.filter(user=user)

    context_dict = {'posts': posts}

    if request.method == 'POST':
        form = AddPostForm(request.POST)
        if form.is_valid():
            post = form.save(commit=False)
            post.user = request.user
            post.save()

    add_post_form = AddPostForm()
    context_dict['add_post_form'] = add_post_form
    return render_to_response('socnet/profile.html', context_dict, context)

1 个答案:

答案 0 :(得分:1)

看起来您应该使用外键而不是一对一字段,因为它是一对多的关系(用户可以写很多文章):

class Post(models.Model):
    user = models.ForeignKey(User)
    title = models.CharField(max_length=255)
    content = models.TextField()
    date = models.DateField(auto_now_add = True)

    def __unicode__(self):
         return self.title
相关问题