int*_*nt3 5 django django-models
我想在ManyToMany关系中检查特定对象的存在.例如:
class A(models.Model):
members = models.ManyToManyField(B)
class B(models.Model):
pass
results = [some query]
for r in results:
print r.has_object // True if object is related to some B of pk=1
Run Code Online (Sandbox Code Playgroud)
我的第一次尝试[some query]是,A.objects.all().annotate(Count(has_object='members__id=1'))但看起来我不能把更多的字段名称放入参数中Count.还有其他方法可以做到这一点吗?
sza*_*man 11
你可以试试
A.objects.filter(members__id=1).exists()
Run Code Online (Sandbox Code Playgroud)
我很确定在 1.4 中实现多对多预取之前,在纯 Python 中不会有任何性能良好的方法来执行此操作
与此同时,我将通过进入 SQL 来做到这一点:
results = A.objects.all().extra(
select={
'has_object': 'EXISTS(SELECT * FROM myapp_a_members WHERE a_id=myapp_a.id AND b_id=1)'
}
)
Run Code Online (Sandbox Code Playgroud)
当然,更简单的方法就是重构代码以对两个单独的查询集进行操作:
results_with_member_1 = A.objects.filter(members__id=1)
results_without_member_1 = A.objects.exclude(members__id=1)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5554 次 |
| 最近记录: |