gpt4 book ai didi

python - 如何建立一个模型与另外两个模型之间的关系

转载 作者:太空宇宙 更新时间:2023-11-03 15:22:02 27 4
gpt4 key购买 nike

我正在使用 Django 框架创建简单的论坛网站,并且我已经创建了评论模型,此时我的评论模型与帖子具有 OneToOne 关系,这意味着每个时刻都属于特定帖子,但还有另一个功能我想提供。每个评论模型都应该有可能与 Post 对象关联到 Answer 模型。答案模型就像在 Stack Overflow 中一样,您添加一个帖子,其他用户可以为其添加答案。我想提一下,答案与具有 OneToOne 关系的 Post 太相关了,我认为这就足够了,不需要版本。总结:如何允许向 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)

最佳答案

  • 答案只能与一篇帖子关联,因此是一对一的
  • 评论只能与一个帖子关联,因此是一对一的
  • 评论只能与一个答案关联,因此是一对一的

请记住,Python 中类的顺序很重要。将 comment 类放在最后,以便您可以在 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)

关于python - 如何建立一个模型与另外两个模型之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43450306/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com