![](/img/trans.png)
[英]django inline_formset - set queryset for a field based on another field
[英]How to provide a queryset for a foreign key field in django inline_formset?
我有以下表格:
class Purchase_form(forms.ModelForm):
class Meta:
model = Purchase
fields = ('date','party_ac', 'purchase')
widgets = {
'date': DateInput(),
}
def __init__(self, *args, **kwargs):
self.Company = kwargs.pop('company', None)
super(Purchase_form, self).__init__(*args, **kwargs)
self.fields['date'].widget.attrs = {'class': 'form-control',}
self.fields['party_ac'].queryset = Ledger1.objects.filter(company = self.Company)
self.fields['purchase'].queryset = Ledger1.objects.filter(Company = self.Company)
class Stock_Totalform(forms.ModelForm):
class Meta:
model = Stock_Total
fields = ('stockitem')
def __init__(self, *args, **kwargs):
self.Company = kwargs.pop('Company', None)
super(Stock_Totalform, self).__init__(*args, **kwargs)
self.fields['stockitem'].widget.attrs = {'class': 'form-control select2',}
self.fields['Total_p'].widget.attrs = {'class': 'form-control',}
Purchase_formSet = inlineformset_factory(Purchase, Stock_Total,
form=Stock_Totalform, extra=6)
我的模特:
class Purchase(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE,null=True,blank=True)
company = models.ForeignKey(company,on_delete=models.CASCADE,null=True,blank=True)
date = models.DateField(default=datetime.date.today,blank=False, null=True)
party_ac = models.ForeignKey(Ledger1,on_delete=models.CASCADE,related_name='partyledger')
purchase = models.ForeignKey(Ledger1,on_delete=models.CASCADE,related_name='purchaseledger')
class Stock_Total(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE,null=True,blank=True)
company = models.ForeignKey(Company,on_delete=models.CASCADE,null=True,blank=True)
purchases = models.ForeignKey(Purchase,on_delete=models.CASCADE,null=True,blank=False,related_name='purchasetotal')
stockitem = models.ForeignKey(Stockdata,on_delete=models.CASCADE,null=True,blank=True,related_name='purchasestock')
我想為內聯表單字段stockitem
創建一個查詢stockitem
,它將根據request.user
和company過濾表單中的結果,就像我為普通的Purchase_form
所做的那樣(我已經使用get_form_kwargs(self)
方法在正常形式的觀點)。
我很難在inlineform中執行查詢集。
我想在我的inline_form中做這樣的事情:
self.fields['stockitem'].queryset = Stockdata.objects.filter(company = self.Company)
正如我在正常形式中所做的那樣。
任何人都知道如何做到這一點?
謝謝
要過濾formset中的字段,您必須覆蓋add_fields
方法。
class PurchaseFormSet(forms.BaseInlineFormSet):
def __init__(self, *args, **kwargs):
self.company = kwargs.pop('company', None)
super().__init__(*args, **kwargs)
def add_fields(self, form, index):
super().add_fields(form, index)
form.fields['stockitem'].queryset = StockData.objects.filter(company=self.company)
值得注意的是,您可以在子表單的__init__
方法中過濾查詢集。 所有表單字段屬性也都傳遞給formset。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.