我正在为网站构建一个论坛应用程序,并在帖子表中有一个“quote_id”列,如果有人引用某个帖子进行回复,则将其放入post_id。这是Posts表的一部分,就像所有其他帖子一样。但是,当我检索与所选主题相对应的主题的所有记录时,会有一些引用其他帖子的记录。我似乎无法在Django ORM中找到一种方法来检索引用的帖子信息以及引用它的帖子(显示在引用它的帖子中)。我到目前为止的内容如下:
def show_topic_posts(request,forum_id,topic_id):
posts = Post.objects.filter(topic_id=topic_id)
topic = Topic.objects.get(topic_id=topic_id)
context = RequestContext(request,{'posts':posts,'topic':topic})
return render_to_response('forums/topics_posts.html',context_instance=context)
class Post(models.Model):
post_id = models.AutoField(primary_key=True)
forum_id = models.ForeignKey(Forum)
topic_id = models.ForeignKey(Topic)
post_date_time = models.DateTimeField(auto_now=True)
post_user_id = models.ForeignKey(User)
post_quote_id = models.IntegerField(null=True,blank=True)
post_body = models.TextField()
post_likes = models.IntegerField(default=0)
post_is_flagged = models.BooleanField(default=False)
def __unicode__(self):
return '%i' % self.topic_id
def get_absolute_url(self):
return '/forums/%s/%s/%s/' % (str(self.forum_id.pk), str(self.topic_id.pk),self.topic_id)
我怎么能这样做?我搜索了谷歌和Django Book和Django网站,试图找到一种方法来做到这一点。谢谢!
答案 0 :(得分:2)
删除post_quote_id
字段,为Post
模型创建递归m2m-relationship。
quoted_by = models.ManyToManyField('self')
这样,帖子可以引用其他帖子,您应该能够轻松获取与特定主题匹配的所有帖子的相关帖子。
example_post = Post.objects.get(pk=1)
posts_that_quote_my_example_post = example_post.quoted_by.all()
在您的模板中,您可以获取引用特定帖子的帖子,如下所示:
<ul>
{% for quote in post.quoted_by.all %}
<li>{{ quote.post_body }}</li>
{% endfor %}
</ul>
如果您想另外存储引用某个帖子的人,则需要添加intermediary model using the through parameter。