У меня может быть 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)