【问题标题】:Products catalogue: filter by parameters产品目录:按参数筛选
【发布时间】:2011-10-02 16:28:16
【问题描述】:

我需要按功能制作过滤产品。

所以,产品型号:

<pre style='color:#000000;background:#ffffff;'><span style='color:#800000; font-weight:bold; '>class</span> Product<span style='color:#808030; '>(</span>models<span style='color:#808030; '>.</span>Model<span style='color:#808030; '>)</span><span style='color:#808030; '>:</span>
    name <span style='color:#808030; '>=</span> models<span style='color:#808030; '>.</span>CharField<span style='color:#808030; '>(</span>max_length<span style='color:#808030; '>=</span><span style='color:#008c00; '>255</span><span style='color:#808030; '>,</span> unique<span style='color:#808030; '>=</span><span style='color:#e34adc; '>True</span>'<span style='color:#808030; '>)</span>

以及特征模型:

<pre style='color:#000000;background:#ffffff;'><span style='color:#800000; font-weight:bold; '>class</span> Value<span style='color:#808030; '>(</span>models<span style='color:#808030; '>.</span>Model<span style='color:#808030; '>)</span><span style='color:#808030; '>:</span>
    value <span style='color:#808030; '>=</span> models<span style='color:#808030; '>.</span>CharField<span style='color:#808030; '>(</span>max_length<span style='color:#808030; '>=</span><span style='color:#008c00; '>50</span><span style='color:#808030; '>)</span>

<span style='color:#800000; font-weight:bold; '>class</span> FeatureName<span style='color:#808030; '>(</span>models<span style='color:#808030; '>.</span>Model<span style='color:#808030; '>)</span><span style='color:#808030; '>:</span>
    name <span style='color:#808030; '>=</span> models<span style='color:#808030; '>.</span>CharField<span style='color:#808030; '>(</span>max_length<span style='color:#808030; '>=</span><span style='color:#008c00; '>50</span><span style='color:#808030; '>)</span>

<span style='color:#800000; font-weight:bold; '>class</span> Feature<span style='color:#808030; '>(</span>models<span style='color:#808030; '>.</span>Model<span style='color:#808030; '>)</span><span style='color:#808030; '>:</span>
    name <span style='color:#808030; '>=</span> models<span style='color:#808030; '>.</span>ForeignKey<span style='color:#808030; '>(</span>FeatureName<span style='color:#808030; '>)</span>
    value <span style='color:#808030; '>=</span> models<span style='color:#808030; '>.</span>ForeignKey<span style='color:#808030; '>(</span>Value<span style='color:#808030; '>)</span>
    item <span style='color:#808030; '>=</span> models<span style='color:#808030; '>.</span>ForeignKey<span style='color:#808030; '>(</span>Product<span style='color:#808030; '>)</span>

要标记过滤的模板形式,我需要获取所有可能的特征名称和该特征的值。

像这样:

颜色:红、白、蓝
尺寸:1、2、3

我希望有人理解我,告诉我如何聪明地实现一个功能。谢谢:)

【问题讨论】:

  • 为什么这些字段有外键?这些可以只是一个模型产品上的字段: value = char... feature_name = char... item = char...

标签: python django filter catalog


【解决方案1】:

首先列出给定产品的所有功能:

product = Product.objects.get(pk=given_pk)
features = product.feature_set.all().select_related()

现在直接在 Python 中对您的功能进行分组。

features_dict = {}
for feature in features:
    values = features_dict.get(feature.name.name, [])
    features_dict[feature.name.name] = values + [feature.value.value]

这将为您提供将所有名称链接到其现有值的 dict。

【讨论】:

  • 仅供参考:代码来自我的脑海,未经测试甚至解析。
  • 但是我怎样才能在 django 模板上列出这本词典呢?
  • 非常感谢,我做到了:)
猜你喜欢
  • 1970-01-01
  • 2020-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-22
  • 1970-01-01
  • 2017-12-28
  • 1970-01-01
相关资源
最近更新 更多