Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:将列表添加到查询集_Python_Django - Fatal编程技术网

Python Django:将列表添加到查询集

Python Django:将列表添加到查询集,python,django,Python,Django,我是django的新手,如果这不可能或不容易,我深表歉意 我有一个视图,它接受模型的一个子集 data = Terms.objects.filter(language = language_id) 子集是一种语言。对于一种语言,集合有许多概念。有些语言可能对多个概念使用同一个词,我希望在SVG图像中对这些概念使用相同的颜色。所以我接下来要做的是: for d in data: if d.term is None: d.colour = "#D3D3D3" els

我是django的新手,如果这不可能或不容易,我深表歉意

我有一个视图,它接受模型的一个子集

data = Terms.objects.filter(language = language_id)
子集是一种语言。对于一种语言,集合有许多概念。有些语言可能对多个概念使用同一个词,我希望在SVG图像中对这些概念使用相同的颜色。所以我接下来要做的是:

for d in data:
    if d.term is None:
        d.colour = "#D3D3D3"
    else:
        d.colour = termColours[d.term] 
其中termcolors是一个字典,其中键是唯一的术语,值是我想要的十六进制颜色

我想这会给我的queryset添加一个新的颜色属性。但是,当我将queryset转换为json(以便将其传递给JS)时,Color对象不在那里

    terms_json = serializers.serialize('json', data)

如何在queryset中添加新的颜色元素

将查询集转换为Dict,然后修改值

Ex:

data = Terms.objects.filter(language = language_id).values()
for d in data:
    if d.term is None:
        d.colour = "#D3D3D3"
    else:
        d.colour = termColours[d.term] 

如果我理解正确-你需要。可能看起来是这样的:

from django.db.models import Case, When, Value

data = Terms.objects.filter(language = language_id)
                     .annotate(color = Case(
                               When(term__isnull = True, then = "#D3D3D3"),
                               When(term__isnull = False, then = termColours[Value(term)]),)) 

这里唯一的问题是-我现在不太清楚-
termcolors[Value(term)]
,您需要测试不同的组合以获得字段
term
的值

你能解释一下为什么会有帮助吗?.values()将把你的查询集变成一个字典列表。因此,它们可以根据您的意愿进行修改。这将打破“AttributeError:'dict'对象没有属性'\u meta'”的序列化行。这应该会有所帮助。