首页 > 解决方案 > 如何限制每个字段在 django 查询集中返回的字段

问题描述

我有一排产品,它们倾向于共享一些信息,例如相同的图像(一张图像可能显示多个产品)、描述、制造商等。

我想选择一些字段只显示一次信息。我不能为此使用 distinct(我不认为),因为信息并不总是相同的,例如描述,但可能只是细微的不同,以至于我不想重复它。

目前,我正在使用 for 循环来显示每个结果中的字段,最终结果如下:这个:

这是我在我看来使用的代码:

def collection_detail(request, name=None):
    template = loader.get_template('/webapps/mywebapp/furniture/main_page/templates/main_page/detail.html')
    products = product.objects.filter(id=name)
    cart_product_form = CartAddProductForm()
    context={'products': products,
    'cart_product_form': cart_product_form}
    return HttpResponse(template.render(context))

在视图中执行此操作的适当方法是什么,忽略某些字段的后续行?

编辑:示例查询集结果

collection_name|manufacturer|product_type|description|image_url
----------------------------------------------------------------
Testing        |FakeCo      |Bed         |pretty nice|/img/1.jpg
Testing        |FakeCo      |Desk        |pretty bad |/img/2.jpg
Testing        |FakeCo      |Nightstand  |pretty ok  |/img/1.jpg
Testing        |FakeCo      |Draws       |pretty nice|/img/3.jpg

在上述数据的示例中,我只想显示一次集合名称和制造商,所以第一个结果就可以了,每个产品类型,第一个描述,不管它说什么,每个图像都是不同的而不是重复的.

标签: pythondjangodjango-views

解决方案


这样

products = product.objects.filter(id=name)

它将返回一个查询集,这意味着它包含多个产品信息。如果您只想获取单个对象信息,请更改查询,如下所示:

products = product.objects.filter(id=name).first()
or,
products = product.objects.filter(id=name)[:1]

更新 如果你想显示一些字段一个值然后使用这个:

{{ value|first }}

推荐阅读