kof*_*dog 5 python django django-models
我对 Django 很陌生,大部分时间都是 C 语言(嵌入式/Linux),所以我为我的无知道歉。我尝试搜索这个确切的查询,但没有成功。
我有两个模型,每个模型都有一个指向同一个第三个模型的多对多字段。第三种模型代表了某种限制。
class Restriction(models.Model):
...
class ClassA(models.Model):
...
restrictions = models.ManyToManyField(Restriction)
class ClassB(models.Model):
...
restrictions = models.ManyToManyField(Restriction)
Run Code Online (Sandbox Code Playgroud)
我预计会有一个 ClassA 实例(称为 object_a)。我想找到 ClassB 的所有实例,这些实例不包含object_a 中的任何限制。它看起来像这样:
class ClassA(models.Model):
...
restrictions = models.ManyToManyField(Restriction)
def get_valid_b_objects():
return ClassB.objects.exclude(restrictions__in=self.restrictions)
Run Code Online (Sandbox Code Playgroud)
但这感觉不对。同样,如果 ClassB 对象中的任何限制也存在于我的 ClassA 对象中,则应从查询中排除该 ClassB 实例。因此,如果:
然后object_a.get_valid_b_objects()应该返回object_b4、object_b5和object_b6。
非常感谢。如果这个问题已经得到解决,请随时引导我找到另一个答案。
你所拥有的应该有效。只需确保您使用实际的QuerySet,而不是相关的管理器:
# don't forget '.all()'
return ClassB.objects.exclude(restrictions__in=self.restrictions.all())
Run Code Online (Sandbox Code Playgroud)
这将排除B具有任何A实例限制的任何实例。
| 归档时间: |
|
| 查看次数: |
3061 次 |
| 最近记录: |