在Django的views.py中从for循环选择特定对象

-1 投票
1 回答
635 浏览
提问于 2025-04-18 05:25

我想在 Django 的 views.py 文件中,从一个循环中逐个选择对象。

views.py

crave = CraveData.objects.filter(person=request.user.id)
    for crave1 in crave:
        #print crave1
        check = Comment.objects.filter(crave=crave1)

comment.model.py

class Comment(models.Model):
    comment_owener = models.ForeignKey(User)
    crave=models.ForeignKey(CraveData, blank = True,null = True)
    reply=models.CharField(max_length=1000, blank = True,null = True)
    unique_id= models.IntegerField(max_length=50, blank = True,null = True)
    date= models.DateTimeField(auto_now_add=True, blank=True)
    def __unicode__(self):
        return self.reply

crave.model.py

class CraveData(models.Model):
    person = models.ForeignKey(User)
    post=models.TextField(blank = True,null = True)

    date= models.DateTimeField(auto_now_add=True, blank=True)
    def __unicode__(self):
        return self.post

在打印 crave1 的时候,我得到了与特定用户相关的所有 crave 数据。在这里,我打印的结果是 Post1 和 Post2。现在我想逐个选择每个 crave,这样我就可以把相关的评论分配给对应的 crave。在这个例子中,我想选择 Post1,这样我就可以把与 Post1 相关的评论分配给它自己。并且我想对该用户所有的 crave 都这样做。

我尝试了以下方法:

crave1.check=Comment.objects.filter(crave=crave1)

所以我得到了这个回复:

[<Comment: reply1>, <Comment: Reply1.1>, <Comment: reply1.3>]
[<Comment: reply2>]

但是

[<Comment: reply1>, <Comment: Reply1.1>, <Comment: reply1.3>] 

这些评论是与 Post1 相关的,

[<Comment: reply2>] 

而这个评论是与 Post2 的 crave 相关的。

comment.html

<p><strong>{{user.username}} said:</strong></p><br>
                        {% for crave1 in crave %}

                        {{crave1}}<br>
                        {% for pf in check%}
                     {{pf.reply}}<br>
                     {% endfor %}

                     {% endfor %}

所以在浏览器中的结果是:

管理员说:

Post1
回复2
Post2
回复2

基本上,我想为特定用户显示帖子及其相关评论。请帮我解决这个问题。

1 个回答

1

你可以这样使用反向外键关系:

{% for crave1 in crave %}
   {{crave1}}<br>
   {% for comment in crave1.comment_set.all }}
       {{comment.reply}}<br>
   {% endfor %}
{% endfor %}

这里有相关的文档。 related_name反向关系。

撰写回答