2014-04-29 35 views
0

我有一個OneToOneField Post模型到用戶模型IntegrityError對象第二次

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 

當我添加一個新的職位(使用表單),一切都OK了。但是,當我添加第二個帖子傳遞相同的用戶時,我得到了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

它看起來像你應該使用外鍵,而不是一維的因爲它是一對多的關係(用戶可以寫很多文章):

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 
+0

謝謝,那真是一個非常愚蠢的錯誤! – sonderlain

+0

不客氣。隨意將答案標記爲✓接受。 –