2017-04-17 91 views
1

我正在使用Django框架創建簡單的論壇站點,並創建了評論模型,此時我的評論模型與Post有OneToOne關係,這意味着每個時刻都屬於到具體的帖子,但也有我想提供的另一個功能。每個評論模型都應該有可能與Post對象相關。答案模型就像堆棧溢出一樣,你添加一個帖子,另一個用戶可以添加一個答案。我想提一下,答案與Post One OneOne關係太相關,我認爲這將是足夠的,並且不需要版本。 總結:如何允許向Post對象或Answer對象添加註釋? 另外我想說,我正在考慮創建兩個評論模型,即PostComment和AnswerComment,但我得出的結論是非常糟糕的解決方案。如何使一個模型與另兩個模型之間的關係

class Post(models.Model): 
    subject = models.CharField(max_length=100) 
    description = models.TextField(null=True) 
    section = models.ForeignKey(Section, on_delete=models.CASCADE, null=True) 
    author = models.ForeignKey(User, null=True, blank=True) 
    created_date = models.DateTimeField(default=timezone.now) 
    published_date = models.DateTimeField(blank=True, null=True) 
    slug = models.SlugField(max_length=100, null=True) 
    active = models.BooleanField(default=True) 

    def __str__(self): 
     return self.subject 

    def publish(self): 
     self.published_date = timezone.now() 
     self.save() 

    def close(self): 
     self.active = False 
     self.save() 


class Comment(models.Model): 
    content = models.CharField(max_length=600) 
    post = models.OneToOneField(Post, on_delete=models.CASCADE) 
    author = models.ForeignKey(User, null=True, blank=True) 
    published_date = models.DateTimeField(blank=True, null=True) 

    def publish(self): 
     self.published_date = timezone.now() 
     self.save() 

    def __str__(self): 
     return "Comment to post: {0} added by {1} at {2}.".format(self.post.subject, self.author, self.published_date) 


class Answer(models.Model): 
    content = models.TextField() 
    post = models.OneToOneField(Post, on_delete=models.CASCADE) 
    author = models.ForeignKey(User, null=True, blank=True) 
    published_date = models.DateTimeField(blank=True, null=True) 

    def publish(self): 
     self.published_date = timezone.now() 
     self.save() 

    def __str__(self): 
     return "Answer to post: {0} added by {1} at {2}.".format(self.post.subject, self.author, self.published_date) 

回答

1
  • 答案可以關聯到只有一個職位,所以一對一
  • 評論只能與一個職位相關聯,所以一對一
  • 評論只有一個答案相關的,所以一到一個

請記住,類的順序在Python中很重要。在最後放置註釋類,以便您可以在Post和Answer之間創建一對一的關係。在目前的位置,你只能用Post做到這一點。

class Post(models.Model): 
    ## 
class Answer(models.Model): 
    ## 
class Comment(models.Model): 
    post = models.OneToOneField(Post, on_delete=models.CASCADE, null=True, blank=True) 
    answer = models.OneToOneField(Answer, on_delete=models.CASCADE, null=True, blank=True) 
+0

爲什麼在評論中回覆字段與Post相關聯兩次,但在兩個不同的字段中? – dannyxn

+0

@dannyxn對不起,這是一個錯誤。 –

+0

沒問題。我會在稍後嘗試。 – dannyxn

0

如果一個Post對象可以有多個註釋,我認爲您的註釋字段中需要使用ForeignKey。關於答案,也許您可​​以在您的評論中添加另一個字段,指向對象的答案,如果某個答案有多個評論被允許,則與ForeignKey相關。

+0

我認爲你不明白我的問題,這是關於我的評論可以添加回答,但它也可以添加到帖子,我的意思是我可以評論答案和帖子,但如何告訴到我想評論的數據庫,即帖子不回答? – dannyxn

+0

是的,如果您將評論添加到帖子中,請填寫帖子欄。如果您將其添加到答案中,請填寫答案字段。兩者都在評論對象中。但是,也許你是對的,我不明白你的問題,如果是的話,很抱歉。 – XaviP

+0

所以你說我應該在我的評論模型中創建兩個ForeignKey字段? – dannyxn

相關問題