假设我有一个从 Coconut 到 Swallow 的外键(即,一只燕子携带了许多椰子,但每个椰子只被一只燕子携带)。现在假设我有一个从 husk_segment 到 Coconut 的外键。
现在,我有一个 husk_segments 列表,我想知道所有这些是否都被特定的燕子抓住。
我可以使用 Swallow.objects.filter(coconuts_carried__husk_sements__in = husk_segment_list) 来显示这只燕子已经抓住了列表中的至少一个壳段。现在,我怎样才能证明燕子曾经携带过的每个外壳部分都在这个列表中呢?
我可以有swallow.objects.filter(coconuts_carried__husk_sements__in =
husk_segment_list) 来表明这只燕子已经抓住了至少一个
列表中的外壳部分。
不,这是错误的,这给了你一个燕子名单其至少携带有 *husk_segment_list* 中的一个外壳片段。
如果我没理解错的话,我们正在谈论检查特定的燕子。
所以,根据你的描述,我猜你的模型看起来像这样:
class Swallow(models.Model):
name = models.CharField(max_length=100)
class Coconut(models.Model):
swallow = models.ForeignKey(Swallow, related_name='coconuts_carried')
class HuskSegment(models.Model):
coconut = models.ForeignKey(Coconut, related_name='husk_segments')
如果您已经有了需要检查燕子段的外壳段列表,则没有理由需要在查询中解析它。获取燕子的片段并检查它是否是您的外壳片段列表的超集。
所以我们有:
#husk_segment_list = [<object: HuskSegment>, <object: HuskSegment>, <object: HuskSegment>...]
husk_segments_set = set((husk.pk for husk in husk_segment_list))
whitey = Swallow.object.get(name='Neochelidon tibialis')
wh_segments_set = set((value[0] for value in HuskSegment.objects.filter(coconut__in=whitey.coconuts_carried.all()).values_list('id')))
whitey_has_carried_all = wh_segments_set.issuperset(husk_segments_set)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)