我想删除相关字段中的重复项,我的queryset示例:
example = models.Object.objects.values('name', 'photo__name', 'url', 'photo__url').distinct()
Run Code Online (Sandbox Code Playgroud)
if name == photo__name and url == photo_url 我需要删除其中一个,如何使用Django ORM执行此操作或者我需要迭代查询集?
pco*_*nel 10
如果您使用的是PostgreSQL,请查看Django文档distinct():
仅在PostgreSQL上,您可以传递位置参数(*fields)以指定DISTINCT应该应用的字段的名称...
指定字段名称时,必须
order_by()在QuerySet中提供一个,并且字段order_by()必须以distinct()相同的顺序中的字段开头.
因此,在您的示例中,您可以使用以下命令删除某些字段上的重复项:
.order_by('photo__name', 'photo__url').distinct('photo__name', 'photo__url')
Run Code Online (Sandbox Code Playgroud)
要在过滤中引用模型字段,您可以使用 Django ORMF函数: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'))
Run Code Online (Sandbox Code Playgroud)
那有用吗?
| 归档时间: |
|
| 查看次数: |
8121 次 |
| 最近记录: |