如何限制每个字段在Django queryset中返回的字段

时间:2018-12-31 04:32:01

标签: python django django-views

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

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

此刻,我正在使用for循环显示每个结果中的字段,最终结果如下:this:

这是我在视图中使用的代码:

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

在上述数据的示例中,我只想显示集合名称和制造商一次,因此第一个结果将起作用,每种产品类型,不管其内容如何,​​都应具有第一个描述,并且每个图像都不同且不是重复的。

2 个答案:

答案 0 :(得分:0)

以此

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

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

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

更新 如果要显示某些字段,请使用一个值:

{{ value|first }}

答案 1 :(得分:0)

from collections import defaultdict
import pandas as pd

dict_for_df = defaultdict(list)
last_find = None
last_date = None

with open("test.txt",'r') as f:
    for line in f.readlines():
        curr_find = line.find("/")
        if line == "\n":
            continue
        elif curr_find == 2:
            Date = line.replace("\\n","").strip()
            dict_for_df['DateOfWritten'].append(Date)
            last_date = Date
            last_find = 2
        elif (last_find == 2 and  curr_find != 4):
            dict_for_df['Date'].append(last_date)
            dict_for_df['text'].append(line.replace("\n","").strip())
            last_find = 0
            last_date = ''
        elif curr_find == 4:
            dict_for_df['Date'].append(line.replace("*","").replace("\n","").strip())
            last_date = ""
            last_find = None
        else:
            dict_for_df['text'].append(line.replace("\n","").strip())
            last_date = ""
            last_find = None

df =  pd.DataFrame(dict_for_df)

时间不长,但可以解决您的问题。 “设置”将使所有通用名称一次出现在列表中。