Объект Queryset Many to many 'ManyRelatedManager' не является итерируемым

Я использую формы для фильтрации вариантов отношений "многие ко многим", чтобы показать только те, которые следуют за набором запросов. Вот как выглядит моя форма

class ContractAdminForm(forms.ModelForm):
    class Meta:
      model = Contract
      fields = '__all__'

    def __init__(self, *args, **kwargs):
        super(ContractAdminForm, self).__init__(*args, **kwargs)
        self.fields['client_year_periods'].queryset =ClientYearPeriod.objects.filter(
              Q(contract_id__isnull=True) | Q(contract_id=self.instance.id) &
              Q(client__in=self.instance.client_entity.all()))

Ошибка: объект 'ManyRelatedManager' не является итерируемым. Проблема вызвана Q(client__in=self.instance.client_entity))

Мне нужно фильтровать годы модели, используя юридическую модель клиента, которая подключена к Client Ops.

Смотрите здесь, как он построен

enter image description here

Модели

class ClientEntity(models.Model):
    name = models.CharField(max_length=350, verbose_name='Client Name')
    countries = models.ManyToManyField(Country, blank=True)
    operations_code = models.ManyToManyField(Client)

class ClientYearPeriod(models.Model):
    client = models.ForeignKey(Client, on_delete=models.PROTECT, null=True)
    [...]

class Contract (models.Model):
   client_entity= models.ManyToManyField(ClientLegal)
   client_year_periods = models.ManyToManyField(ClientYearPeriod, blank=True)
   [...]


class Client(models.Model):
    code = models.CharField(max_length=3, verbose_name='Client Code')
    name = models.CharField(max_length=250, unique=True)
   

Ожидаемый результат

В этом контракте выбран клиент Someone

enter image description here

В модели сущности клиента она связана с Client = BEM

enter image description here

Здесь должны быть показаны только те, которые выбрал Клиент: BEM После сохранения (не при создании контракта, так как клиент, выбранный выше, еще не сохранен)

enter image description here

client__in=… ожидает QuerySet, self.instance.client_entity является менеджером, а не QuerySet.

Но вам нужно сделать QuerySet из Client, поэтому:

class ContractAdminForm(forms.ModelForm):
    
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['client_year_periods'].queryset = ClientYearPeriod.objects.filter(
            Q(contract_id__isnull=True) |
            Q(contract_id=self.instance.id) &
            Q(client__in=Client.objects.filter(cliententity__contract=self.instance).distinct())
        )
    
    class Meta:
        model = Contract
        fields = '__all__'
Вернуться на верх