如何在1个Django模板中使用2个模型的related_name

时间:2018-05-14 10:55:36

标签: python django django-models django-templates django-views

您好Djangonauts我是Django的新手,所以如果我的逻辑或代码中存在愚蠢的错误,请原谅我。我有4个型号。用户,组,发布和证明。

用户只是常规用户模型

群组是主题(例如:骑自行车,篮球,划独木舟......)用户选择哪个群组并在该群组中写一个帖子。

发布:帖子就像是作者展示如何做的“任务”。(例如:如何在一个轮子上骑自行车......)。最后一个模型是Proof模型,其他用户回答说他们做了帖子解释如何做的事情。

证明:当其他用户执行帖子所说的内容时。他们有2个上传2张图片点击提交,他们的名字被添加到执行“任务”的成员

以下是 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.CharField(max_length=1000)

以下是我的post.models.py

class Post(models.Model):
    user = models.ForeignKey(User, related_name='posts')
    group = models.ForeignKey(Group, related_name='posts')
    title = models.CharField(max_length=250, unique=True)
    slug = models.SlugField(allow_unicode=True, unique=True)
    message = models.TextField()
    post_image = models.ImageField()
    made = models.ManyToManyField(User, blank=True, related_name='post_made')

下面是我的post_detail视图

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'))

下面是我的 post_detail模板(这就是问题所在)

{% if user in post.made.all %}
    {% for proof in post.postproofmade.all %} #I know I am referencing the related_name incorrectly. I have tried various options none seem to work 
    <a href="{% url 'proof:proof_delete' slug=post.slug pk=proof.pk %}">
        <img src="{% static 'images/thumbs_up_yes.png' %}" height="25px">
    </a><br/>
    {% endfor %}
    {% else %}
    <a href="{% url 'proof:new_proof' slug=post.slug %}">
        <img src="{% static 'images/thumbs_up_no.png' %}" height="25px">
    </a><br/>
{% endif %}

我刚刚意识到这段代码可能存在一个小问题。如果有2个人执行任务,则竖起大拇指图像显示2次。如果3个人要完成任务。竖起大拇指的图像将显示3次。我不希望这样。 Thumbs up图像应仅显示一次。

如果用户不是执行任务的成员之一,那么它会正确显示。或者,如果用户是匿名用户,即使它正确显示。 (请参阅下面问题的图片)

竖起大拇指是一个像“facebook like”这样的切换按钮,只有它有一个表格可以添加2张图片来证明你是这么做的。删除证据,将您从执行任务的人员列表中删除。此功能正常运行

{% for user in user.proofmade.all | slice:":1" %} #This gets the job done 
#But I am afraid its not production worthy. I would love a actual solution. If 
#not can someone tell me. What are the bad effects of using this 
#If there are 10,000 people who do the task will the forloop run 
#10,000 times and show just 1 result?

enter image description here   enter image description here

0 个答案:

没有答案