Fun*_*der 2 django django-queryset
如果我有以下模型:
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
Run Code Online (Sandbox Code Playgroud)
如何列出具有非唯一姓氏字段的所有对象?例如,如果有 20 个对象的姓氏均为“Smith”,则会列出它们。但是,如果只有一个对象的姓氏为“Euler”,则它不会包含在列表中。
这是 2 个查询的一种方法:
non_unique_last_names = (Person.objects
.values_list('last_name', flat=True)
.annotate(last_name_count=Count('last_name'))
.filter(last_name_count__gt=1))
non_unique_person_objects = Person.objects.filter(last_name__in=non_unique_last_names)
Run Code Online (Sandbox Code Playgroud)
小智 5
你可能会想要施放listtonon_unique_last_names来战斗OperationalError: sub-select returns 2 columns - expected 1
因此,对于那些将使用此代码的人来说,正确的版本是:
from django.db.models import Count
non_unique_last_names = (Person.objects
.values_list('last_name', flat=True)
.annotate(last_name_count=Count('last_name'))
.filter(last_name_count__gt=1))
non_unique_person_objects = Person.objects.filter(last_name__in=list(non_unique_last_names))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1552 次 |
| 最近记录: |