【问题标题】:Filter a model in using "for" in Django在 Django 中使用“for”过滤模型
【发布时间】:2015-05-30 05:58:21
【问题描述】:

在模板中使用 {% for %} 时是否有过滤方法? 例如我得到了这个:

型号:

class Options(models.Model):
    option = models.CharField(max_length=50)

class Brand(models.Model):
    brand = models.CharField()

class Products(models.Model):
    type = models.ForeignKey(Options)
    brand = models.ManyToManyField(Brands)

在模板中:

{% for article in Options %}
    {% for sth in products where type=article.0 %} <--- Is this possible ?
                                                        I need to make it iterable
         //Do something
    {% endfor %}
{% end for %}

有办法吗? 有什么不懂的就问吧:)

【问题讨论】:

  • 您是在寻找ifequal 标签还是== 运算符?
  • 不,我正在寻找一个过滤器,比如 model.objects.filter(field="something"),但是可以在模板上使用,你明白吗?

标签: python django filter many-to-many


【解决方案1】:

我认为你从错误的角度来处理这个问题。像这样的逻辑应该出现在视图中。

您似乎希望按类型对产品进行分组,因此无论您在产品视图中指定查询集的任何位置,都可以使用 order by。

queryset = Products.objects.filter(filters_here_if_you_need=any).order_by("type__option")

然后在你的模板中你只需要内部循环

{% for sth in products  %} 
     //Do something
{% endfor %}

现在您的产品将按选项订购。

还是我错过了什么?

【讨论】:

  • 对,但是我有一个按类型过滤的菜单,所以如果他点击类型 1,它只需要显示该类型和其他类型,这就是我想要完成的
  • 您是否在 JavaScript 中进行过滤?还是在 Django 中?如果它在 Django 中,则将过滤器传递给视图中的查询集。
【解决方案2】:

其实有很多选择

{% for thing in things %}
    {% for product in products.all %}
        {% if thing.type == product.type %}
            <!-- do stuff -->
        {% else %}
            <!-- pass -->
        {% endif %}
    {% endfor %}
{% end for %}

{% for thing in things %}
    {% for product in products.all %}
        {% ifequal thing.type product.type %}
            <!-- do stuff -->
        {% else %}
            <!-- pass -->
        {% endifequal %}
    {% endfor %}
{% end for %}

可以写一个SimpleTag 来直接在您的模板中过滤您的相关经理,但我不建议这样做。您还可以向任何一个接受参数的模型添加一个属性,并使用一个简单的标签来提供模板中的方法。

如果您的数据不是那么动态,您也可以直接将正确的context 返回到您的模板。

【讨论】:

  • 它有效,但即使它们相等,它似乎也不会返回 True ,知道吗?
猜你喜欢
  • 2010-11-15
  • 1970-01-01
  • 2020-08-10
  • 1970-01-01
  • 1970-01-01
  • 2017-04-21
  • 2013-09-23
  • 2021-11-02
  • 1970-01-01
相关资源
最近更新 更多