【问题标题】:Django - Getting a list of fields in a querysetDjango - 获取查询集中的字段列表
【发布时间】:2020-02-03 23:14:12
【问题描述】:

我需要帮助来获取查询集中的字段列表。

我正在使用 Django shell 进行测试,但我没有任何运气。

如果我像下面这样.values

abc = PrescribedMedsSchedule.objects.filter(medication_date=scheduled_date_obj, medication_time__time=scheduled_time_obj) \
        .select_related('prescribed_meds_id') \
        .select_related('prescribed_meds_id__childno') \
        .values(
            'prescribed_meds_id',
            'medication_date', 
            'medication_time', 
            'quantity',
            'form',
            'prescribed_meds_id__name_of_medication', 
            'prescribed_meds_id__childno__child_name',
            'prescribed_meds_id__childno__group',
            'prescribed_meds_id__childno__line_no'
            ).order_by('prescribed_meds_id__name_of_medication')

当我在 shell 中键入 abc 时,我得到了可以在模板中使用的确切列名。 QuerySet [{'prescribed_meds_id': 5731, 'medication_date': datetime.date(2020, 2, 4), ....

但是如果我使用 .only 而不是 .values,当我输入 abc 时,我会得到一个 QuerySet [<PrescribedMedsSchedule: PrescribedMedsSchedule object (6117) ....

如何检索/显示此查询集中的字段/列?

我问的原因是当我使用.only 时,select_related 表中的字段不再出现在 HTML 模板中。

【问题讨论】:

  • 此代码在我发布时已删除...如果我使用 .values,我会得到
  • 如果我将 .values 替换为 .only,我会得到 #。我想查看查询集中的字段
  • 用你的 cmets 的内容编辑你的问题,如果你在 cmets 中包含了重要信息,就很难理解。
  • 标记行者。我道歉。我之前输入了输出,但由于它们在 '' 内,Stackoverflow 没有正确显示它。必须快速计算谷歌如何在此处显示带有“”的项目。
  • 那么你希望你的输出是什么样子的?

标签: django django-queryset names


【解决方案1】:

如果您希望结果查询集包含字典,请使用 QuerySet.values;如果您希望结果查询集包含模型实例,请使用 QuerySet.only

在终端打印时可以观察到使用valuesorders查询的结果是一样的。

print(abc.query)

如果您仍想使用QuerySet.only 并将查询集结果作为模型实例的可迭代检索,那么您可以使用点运算符访问相关字段。例如,要在模板中输出子名称:

{% for a in abc %}
  {{ a.prescribed_meds_id.childno.child_name }}
{% endfor %}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-22
    • 2018-06-21
    • 2018-02-06
    • 2017-08-29
    • 1970-01-01
    • 2016-12-20
    • 2017-09-18
    • 2021-12-10
    相关资源
    最近更新 更多