我想删除相关字段中的重复项,我的查询集示例:
example = models.Object.objects.values('name', 'photo__name', 'url', 'photo__url').distinct()
if name == photo__name and url == photo_url
我需要删除其中一个,如何使用Django ORM执行此操作或者需要迭代查询集?
答案 0 :(得分:9)
如果您使用 PostgreSQL ,请查看Django docs on distinct()
:
仅在 PostgreSQL 上,您可以传递位置参数(*字段)以指定DISTINCT应应用的字段的名称...
指定字段名称时,您必须在QuerySet中提供
order_by()
,order_by()
中的字段必须以distinct()
中的字段开头,顺序相同。
因此,在您的示例中,您可以使用以下方法删除某些字段上的重复项:
.order_by('photo__name', 'photo__url').distinct('photo__name', 'photo__url')
答案 1 :(得分:0)
要在过滤中引用模型的字段,您可以使用Django ORM F
函数:https://docs.djangoproject.com/en/dev/topics/db/queries/#filters-can-reference-fields-on-the-model
但我想你无法删除其中一个 :)你必须决定你要删除哪一个
<强>更新强>
当您按照Object.objects.filter(photo__name='something')
进行过滤时,请按相关照片名称过滤对象表。所以你处理两个表的连接。如果要排除名称=相关照片名称的对象,您应该执行类似这样的操作
from django.db.models import F
Object.objects.exclude(name=F('photo__name'))
这有用吗?