使用related_name在django模板中调用对象属性

时间:2018-04-22 13:57:40

标签: python django python-3.x django-models django-templates

我有3个型号。用户,帖子和证据。用户将帖子添加到网站。当其他用户做帖子说的话。他们上传2张图片说他们完成了任务。模板将显示他们上传的2张图片。我知道我在调用图像的模板中犯了一些错误。有没有人知道使用related_name调用图像的正确方法。仅供参考我是python和Django的新手我很抱歉,如果这个问题太琐碎或逻辑错误

Proof / models.py

User = get_user_model() 
class Proof(models.Model):
user = models.ForeignKey(User, related_name='proofmade')
post = models.ForeignKey(Post, related_name='postproofmade')
made_at = models.DateTimeField(auto_now=True)
image_of_task= models.ImageField()
proof_you_made_it = models.ImageField()
suggestions = models.TextField(max_length=1000)

def __str__(self):
    return self.post.title

模板

{% for user in post.made.all  %}
<div class="container">
   <img src="{{ user.proofmade.image_of_task.url }}" height="150px"/>
   <img src="{{ user.proofmade.proof_you_made_it.url }}" height="150px"/>
</div>
{% endfor %}

发布/ views.py

class PostDetail(SelectRelatedMixin, DetailView):
    model = Post
    select_related = ('user', 'group')

    def get_queryset(self):
        queryset = super().get_queryset()
        return queryset.filter(user__username__iexact=self.kwargs.get('username'))

1 个答案:

答案 0 :(得分:1)

ForeignKey是一对多的关系;因此,related_name允许访问与许多项对应的查询集。您需要迭代该查询集以获取单个项目,在本例中为Proof实例 - 就像您对每个帖子的用户一样。所以,像:

{% for user in post.made.all  %}
   {% for proof in user.proofmade.all %}
    <div class="container">
       <img src="{{ proof.image_of_task.url }}" height="150px"/>
       <img src="{{ proof.proof_you_made_it.url }}" height="150px"/>
    </div>
    {% endfor %}
{% endfor %}