【问题标题】:Accessing elements in a list in a Queryset访问查询集中列表中的元素
【发布时间】:2020-01-16 00:32:54
【问题描述】:

我正在从我的 Django 站点页面的列表中保存一个元素

保存到数据库时列表如下所示

['Precipitaciones', 'Pirineo', 'aragonés', 'catalán']
['activarán', 'tormentas', 'ibérica,', 'descartan', 'chubascos', 'dispersos,', 'temperaturas']

我希望能够访问所有元素,但是当我运行带有上下文的查询集时,我会返回

 <QuerySet [("['Precipitaciones', 'Pirineo', 'aragonés', 'catalán']",  ("['activarán', 'tormentas', 'ibérica,', 'descartan', 'chubascos', 'dispersos,', 'temperaturas']")]>

在我看来,这就像 Queryset 内元组内的字符串内的列表内的刺。

所以我无法训练如何访问单个元素

当我尝试 → queryset.0.0

我回到了屏幕

返回第一个元素的第一个元素,但我不知道如何获取该元素的第一个字符串,如果我使用 → queryset.0.0.0 我只是再次获得第一个元素,它是一个括号 [

任何帮助或一些我可以发现更多关于它的文档都会很棒。

这是我正在使用的查询集

queryset = model.objects.filter(show_word=True).values_list('word_esp').filter(username_id = user_id_fk)`

【问题讨论】:

  • 您需要出示您的代码。你是怎么产生的?
  • 添加了生成它的查询集。

标签: django python-3.x django-queryset


【解决方案1】:

您将列表作为字符串存储在数据库中。所以 queryset.0.0 是一个字符串而不是列表。并且当您调用 queryset.0.0.0 时返回字符串中的第一个字符[

你有两个解决方案:

1- 如果您的数据库后端是 postgres,您可以使用 JSONField 而不是使用 CharField os TextField

2- 在您的模板中,您可以编写一个过滤器以将字符串加载为 json 并获得预期的元素,如下所示:

@register.filter
def get_from_string_list(str_list, index):
    list_object = json.loads(str_list)
    return list_object[index]

并在您的模板中像这样使用它:

{{ queryset.0.0|get_from_string_list:0 }}

在您的 python 代码中,您可以将选定的字符串转换为 json 并获得预期的索引

【讨论】:

  • 谢谢,这很有道理,它不是数据库中的列表,它是一个字符串。我会试试你的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-31
  • 1970-01-01
  • 2018-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多