我有一个名为Employees
的模型,我想要一个QuerySet包含所有行,但只包含每行的一些特定字段而不是全部字段。
我知道如何查询表/模型中的所有行:
Employees.objects.all()
我想知道如何为每个Queryset元素选择字段。我该怎么做?
我有一个名为Employees
的模型,我想要一个QuerySet包含所有行,但只包含每行的一些特定字段而不是全部字段。
我知道如何查询表/模型中的所有行:
Employees.objects.all()
我想知道如何为每个Queryset元素选择字段。我该怎么做?
Employees.objects.values_list('eng_name', flat=True)
这将创建一个所有 eng_name
的平坦列表。如果您想每行有多个字段,不能使用平坦列表:这将创建元组列表:
Employees.objects.values_list('eng_name', 'rank')
Employee.objects.all().values('eng_name','rank')
var_name = Employee.objects.all().values('eng_name','rank')
- theQuestionManfor person in var_name: print(person['eng_name'] + " " + person['rank'])
- theQuestionManDaniel的答案非常准确。如果你想查询多个字段,请这样做:
Employee.objects.values_list('eng_name','rank')
这将返回一个元组列表。当查询多个字段时,您不能使用named=True。
此外,如果您知道只有一个带有该信息的字段,并且您知道pk id,则可以执行以下操作:
Employee.objects.values_list('eng_name','rank').get(pk=1)
Oskar Persson的答案是最佳的处理方式,因为它使得将数据传递到上下文并从模板中正常处理数据变得更加容易,因为我们可以获得对象实例(可以轻松迭代以获取属性),而不是一个简单的值列表。
之后,您可以轻松地获取所需的属性:
for employee in employees:
print(employee.eng_name)
或者在模板中:
{% for employee in employees %}
<p>{{ employee.eng_name }}</p>
{% endfor %}
active_emps_first_name = Employees.objects.filter(active=True).values_list('first_name',flat=True)
更多细节在这里
。Employees.objects.filter().only('eng_name')
SELECT eng_name FROM Employees;
queryset = ModelName.objects.filter().only('field1', 'field2')
field_names = ['product_id', 'name', 'price', 'status']
results = ModelName.objects.all().values_list(*field_names)
# or for example
# results = ModelName.objects.all().values_list(*field_names, named=True)
SELECT col
而不是SELECT *
吗? - Ciro Santilli OurBigBook.com