从值()或values_list()中排除字段

Azd*_*325 3 python django django-models django-orm

有没有一种有效的方法从函数中排除字段values()values_list.

例如

Videos.objects.filter(id=1).get().values()
Run Code Online (Sandbox Code Playgroud)

我想从此查询集中排除该字段duration.

我知道我可以在结果中指定字段,但是如果我只需要一个字段,那该怎么办.就像在这种情况下,如果我有20个字段,如果我只想要一个不是.

谢谢

Fal*_*gel 16

您必须使用defer这不会在select查询中添加已定义的字段.

Videos.objects.filter(...).defer('duration')
Run Code Online (Sandbox Code Playgroud)

  • 在使用“defer()”之前,请阅读[文档中的注释](https://docs.djangoproject.com/en/stable/ref/models/querysets/#defer):它适用于高级用例。 (3认同)

iMo*_*om0 8

您可以先获取所有字段,然后弹出不需要的字段:

fields = Video._meta.get_all_field_names()
fields.remove('id')
Video.object.filter(...).values(*fields)
Run Code Online (Sandbox Code Playgroud)

  • `get_all_field_names()` 方法不久前已被弃用并被删除。现在你必须做:`[f.name for f in Video._meta.get_fields()]`,请参阅这个答案:/sf/answers/217442011/ (8认同)
  • 要直接获取字段名称,您可以使用:``Video._meta.get_all_field_names()`` (3认同)