【发布时间】:2018-10-18 13:57:12
【问题描述】:
得到这个带有内联和表单类的管理类:
class InvoiceAdmin(admin.ModelAdmin):
....
inlines = [InvoiceLineInline, ]
form = InvoiceForm
....
class InvoiceForm(forms.ModelForm):
....
def clean():
....
class Meta:
model = Invoice
exclude = []
class InvoiceLineInline(admin.TabularInline):
model = InvoiceLine
formset = InvoiceLineInlineFormset
extra = 1
class InvoiceLineInlineFormset(forms.models.BaseInlineFormSet):
def clean(self):
super(InvoiceLineInlineFormset, self).clean()
count = 0
for form in self.forms:
if not hasattr(form, 'cleaned_data'):
continue
data = form.cleaned_data
try:
if data:
count += 1
else:
continue
except AttributeError:
pass
if Decimal(data.get('quantity', 0)) <= 0:
raise forms.ValidationError("Amount should be greater than 0.")
******************************************************
_stock_code = data.get('stock_code', None)
if not len(fetch_stocks_from_connector(request, stock_code=_stock_code)):
raise forms.ValidationError("{} Stock code does not exist at connector.".format(_stock_code))
******************************************************
if count < 1:
raise forms.ValidationError('Need one line at least.')
我需要使用外部方法对 InvoiceLineInlineFormset.clean 中的每个 inlineform 中的 _stock_code 值进行额外验证,如上面星号线之间所示。但是外部方法需要请求对象作为参数才能正常运行。
是否可以将请求对象传递给 clean 方法?
【问题讨论】:
-
可能是
kwargs['instance']你在找什么?在自定义管理表单中我使用它。
标签: django django-forms