bak*_*kar 6 mysql django django-models
我有一个有2个字段的模型.
class MyModel:
tcode = Charfield
created_on = Date field
#some more fields
Run Code Online (Sandbox Code Playgroud)
现在这个模型可以有多个具有相同tcode的行,每行可以有不同的日期或相同.
例如
tcode1, 1/2/2001
tcode2, 1/2/2001
tcode2, 2/2/2001
....etc.
Run Code Online (Sandbox Code Playgroud)
我想过滤此模型的查询,以便tcode和日期字段组合应该是唯一的.我怎样才能获得所有这些对象.
我试图这样做
MyModel.objects.all().order_by('tcode').distinct('tcode', 'created_on')
现在你可能会问,如果在两个字段中有两行具有相同的数据,我想要一行!对我来说无关紧要,任何一行都能正常工作.
Sha*_*ang 14
我不认为有一个单一的查询可以做到这一点,因为数据库没有从重复中选择随机的机制.但是,如果您只关心这两个字段,您可以这样做:
MyModel.objects.order_by('tcode').values('tcode', 'created_on').distinct()
Run Code Online (Sandbox Code Playgroud)
这不会给你完整的MyModel对象,但包含的所有现有组合词典列表tcode和created_on.
小智 9
今天我遇到了同样的问题。在 Django admin 的 get_queryset 方法中,我需要在多个字段中进行不同的操作。我是这样解决这个问题的:
from django.db.models import TextField
from django.db.models.functions import Concat
Mymodel.objects.filter(...).annotate(distinct_name=Concat('tcode', 'created_on', output_field=TextField())).order_by('distinct_name').distinct('distinct_name')
Run Code Online (Sandbox Code Playgroud)
此决定有助于返回带有记录 ID 的 QuerySet
| 归档时间: |
|
| 查看次数: |
4755 次 |
| 最近记录: |