django模型选择单场

时间:2011-09-21 16:26:21

标签: python django django-models

我有一个名为Employees的表/模型,我想将单个字段的所有行作为查询集。

我知道我可以这样做(希望我能做到这一点):

emp_list = Employees.objects.get(all)
emp_names = emp_list.eng_name

会在数据库中查询所有字段并仅使用一个字段吗?有没有更好(更快)的方法呢?

7 个答案:

答案 0 :(得分:112)

Employees.objects.values_list('eng_name', flat=True)

创建所有eng_name的平面列表。如果你想要每行多个字段,你就不能做一个平面列表:这将创建一个元组列表:

Employees.objects.values_list('eng_name', 'rank')

答案 1 :(得分:13)

除了values_list Daniel mentions之外,您还可以使用only(或defer获得相反的效果)来获取对象的查询集拥有他们的id和指定字段:

Employees.objects.only('eng_name')

这将运行一个查询:

SELECT id, eng_name FROM employees

答案 2 :(得分:2)

您可以像这样在过滤器旁边使用values_list;

active_emps_first_name = Employees.objects.filter(active=True).values_list('first_name',flat=True)

更多详细信息here

答案 3 :(得分:1)

我们可以在值上选择必填字段。

MemoryError

答案 4 :(得分:1)

奥斯卡·佩尔森(Oskar Persson)的答案是处理该问题的最佳方法,因为当我们获得对象时,它可以更轻松地将数据传递到上下文并按照 template 实例(很容易获得道具),而不是简单的值列表。

之后,您可以轻松获得所需的道具:

for employee in employees:
    print(employee.eng_name)

或在模板中:

{% for employee in employees %}

    <p>{{ employee.eng_name }}</p>

{% endfor %}

答案 5 :(得分:0)

Daniel的答案就在现场。如果要查询多个字段,请执行以下操作:

process.env

这将显示元组列表。查询多个字段时,不能使用named = Ture。

此外,如果您知道该信息仅存在一个字段,并且知道pk ID,则请执行以下操作:

dotenv

答案 6 :(得分:0)

Employees.objects.filter().only('eng_name')

这将给出所有行的查询集,但只有指定的字段。它没有像上面的其他答案那样给出一个列表。它给你的对象实例。小心;它是 objects.filter().only() 而不仅仅是 objects.only()

它类似于 SQL 查询:

SELECT eng_name FROM Employees;