【问题标题】:Django how to iterate querysets of two subclasses in template?Django如何在模板中迭代两个子类的查询集?
【发布时间】:2019-09-14 10:30:06
【问题描述】:

我将django-model-utils 用于继承管理器。我想用一本字典获得两个子类的结果,而不会重复。

models.py

​​>
class Images(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='images_created', on_delete=models.CASCADE)
    created = models.DateTimeField(auto_now_add=True, null=True, blank=True)
    objects = InheritanceManager()

class Postimg(Images):
    user_img= models.ImageField(upload_to='images/%Y/%m/%d', null=True, blank=True)


class Postsms(Images):
    user_message = models.CharField(max_length=500,blank=True)

views.py

​​>
def home(request):
    all_post = Images.objects.all().order_by('-created').select_subclasses()
    return render(request, 'copybook/home.html',{ 'all_post':all_post})

copybook/home.html

{% for foo in all_post %}
    <hr>
    <br> SMS by:  <p>{{ foo.user}}  __  {{ foo.created }}</p>
    <h2>{{ foo.user_message }}</h2>
    <hr>
    <br> IMAGE by:  <p>{{ foo.user}}  __  {{ foo.created }}</p> 
    <img src="{{ foo.user_img.url }}"width="250">
{% endfor %}

当我上传应该在主页顶部的图像或消息时,我期望结果,但现在当我上传图像时,也会重复出现空白消息。

我认为问题出在我的 home.html 中,因为我不知道如何迭代 使用单个 for 循环超过两个子类而不会重复。

【问题讨论】:

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


    【解决方案1】:

    在您的模板中,您正在处理每个项目,就好像它既是消息又是图像一样。这就是为什么您会得到用于消息的空图像部分和用于图像的空消息部分。

    最简单的解决方法是检查 user_imguser_message 的计算结果是否为 True

    {% for foo in all_post %}
        <hr>
        {% if foo.user_message %}
            <br> SMS by:  <p>{{ foo.user}}  __  {{ foo.created }}</p>
            <h2>{{ foo.user_message }}</h2>
        {% else %}
            <br> IMAGE by:  <p>{{ foo.user}}  __  {{ foo.created }}</p> 
            <img src="{{ foo.user_img.url }}"width="250">
        {% endif %}
    {% endfor %}
    

    您可以使用单独的if foo.user_img 代替else,以避免将带有空消息的消息对象解释为图像。

    【讨论】:

      猜你喜欢
      • 2019-02-05
      • 1970-01-01
      • 1970-01-01
      • 2017-12-16
      • 2018-12-20
      • 2017-02-24
      • 2016-06-23
      • 2023-04-09
      • 1970-01-01
      相关资源
      最近更新 更多