我正在使用表單來過濾多對多關系的選擇,以僅顯示查詢集之后的選擇。這就是我的表單的樣子
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 的客戶法律模型來過濾模型年份。
在這里查看它是如何構建的

楷模
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)
預期結果
此合同已選擇客戶某人

在客戶端物體模型中,它與 Client = BEM 有關

這里它應該只顯示那些 Client: BEM 一旦它被保存(不是在創建合同時,因為上面選擇的客戶端它還沒有保存)

uj5u.com熱心網友回復:
client__in=…期望 a是經理QuerySet,而self.instance.client_entity不是 a QuerySet。
但是你需要做一個QuerySetof Clients,所以:
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__'
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/431194.html
標籤:django django模型 django-forms django-管理员 django-queryset
下一篇:檔案“C:\django\2proj\authentication\utils.py”,第2行,在<module>from6importtext_typeModuleNotFoun
