2015-10-15 75 views
2

請有人幫我解決我的代碼中的這個錯誤。此錯誤或不斷顯示:integrityError,UNIQUE約束失敗:blog_post.author_id

這是我在models.py文件

class Post(models.Model): 
    author=models.OneToOneField(User) 
    topic = models.CharField(max_length=255) 
    article =models.TextField() 
    publish_date=models.DateTimeField(auto_now_add=True) 
    slug=models.SlugField(unique=True) 

代碼這是在views.py文件中的代碼

def add_post(request): 
    if not request.user.is_authenticated(): 
     return redirect('/login/') 
    if request.method=='POST': 
     form= post_form(request.POST) 
     if form.is_valid(): 
      post=form.save(commit=False) 
      post.author=request.user 
      post.slug=slugify(post.topic) 
      form.save() 
      slug=slugify(topic) 
      return redirect('blog.views.post',slug=post.slug) 
     else: 
      return render(request,'post_add.html',{'form':form}) 
    else: 
     form=post_form() 
     template='post_add.html' 
     return render (request,template,{'form':form}) 
+1

你能發佈完整的錯誤嗎? – Programmer

+0

您可能已經在您的Post模型中使用該用戶再次添加了該用戶。 因此,看看郵政表條目,以確保你不重複! –

+1

您可能需要一個ForeignKey而不是OneToOne。由於作者可以有多個帖子。 – karthikr

回答

2

您目前有作家一對一的現場。這意味着每個帖子都有一個作者,每個作者最多隻能有一個帖子。當您嘗試添加具有相同作者的第二篇文章時,您會收到錯誤消息。

而應該使用外鍵。這意味着每個帖子都有一個作者,但是多個帖子可以鏈接到同一個作者。

class Post(models.Model): 
    author=models.ForeignKey(User) 

一旦你做出這個改變,你將不得不創建一個新的遷移和遷移,以刪除唯一的約束。

相關問題