![](/img/trans.png)
[英]Django Admin - How to prefill add inline forms values sent through the querystring?
[英]In django inline model admin, how to prefill extra fields with values
class MyCustomInline(admin.TabularInline):
min_num = 1
extra = 0
fields = ['matcher', 'param0', 'param1']
model = MyModel
form = MyCustomInlineForm
def get_formset(self, request, obj=None, **kwargs):
extra_fields = {
'param0': forms.CharField(label='First Param', required=False),
'param1': forms.CharField(label='Second Param', required=False)
}
kwargs['form'] = type('MyCustomInline', (MyCustomInlineForm,), extra_fields)
return super(MyCustomInline, self).get_formset(request, obj, **kwargs)
這基本上是我如何定義我的內聯表單,以便它有兩個額外的字段 - matcher
是相關表中的標准字段,內聯表單自動處理它。 我通過覆蓋MyCustomInlineForm
的save()
將額外的param值保存在不同的存儲中。
但是如果我編輯現有記錄 - 匹配器值正確顯示但我顯然也想用相應的值預加載param0和param1。 我可以在哪里聯系呢?
我設法自己做了。 我還設法簡化了我定義自定義額外字段的方式,而沒有覆蓋get_formset
方法:
class MyCustomInlineForm(forms.ModelForm):
matcher = forms.ChoiceField(choices=[(v['name'], v['name']) for v in matchers], label='Matcher')
param0 = forms.CharField(label='First Param', required=False)
param1 = forms.CharField(label='Second Param', required=False)
def __init__(self, *args, **kwargs):
super(MyCustomInlineForm, self).__init__(*args, **kwargs)
if self.instance.pk:
""" self.instance is the model for the current row.
If there is a pk property that is not None, it means it's not
a new, empty inline model but we are working with existing one."""
self.initial['param0'], self.initial['param1'] = custom_way_to_load_params(self.instance)
def save(self, commit=True):
model = super(MyCustomInlineForm, self).save(True)
param0 = self.cleaned_data['param0']
param1 = self.cleaned_data['param1']
custom_way_to_save_params(model, param0, param1)
return model
class MyCustomInline(admin.TabularInline):
min_num = 1
extra = 0
fields = ['matcher', 'param0', 'param1']
model = MyModel
form = MyCustomInlineForm
如果需要 - 可以通過覆蓋forms.ModelForm
類的is_valid()
方法並通過self.add_error()
添加錯誤來完成自定義參數的驗證。 我希望它對某人有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.