我试图在Django Admin中预先填充一些内联,并将数据作为查询参数传递(如果在DB中添加新对象)。
class TestCaseInlineFormSet(BaseInlineFormSet):
class Meta:
model = TestCase
fields = '__all__'
def __init__(self, *args, **kwargs):
super(TestCaseInlineFormSet, self).__init__(*args, **kwargs)
ids_string = self.request.GET.get('ids')
if ids_string:
ids = [int(x) for x in ids_string.split(',')]
self.initial = [{'test_case': id} for id in ids]
class TestCaseInline(admin.TabularInline):
model = TestCase
raw_id_fields = ('test_case',)
extra = 1
formset = TestCaseInlineFormSet
def get_formset(self, request, obj=None, **kwargs):
formset = super(TestCaseInline, self).get_formset(request, obj, **kwargs)
formset.request = request
return formset
def get_extra(self, request, obj=None, **kwargs):
extra = super(TestCaseInline, self).get_extra(request, obj, **kwargs)
requested_extras = len(request.GET.get('ids', '').split(','))
return max(extra, requested_extras)
使用此解决方案可以预先填写数据,但是在尝试提交时会出现问题:预填充的内联未标记为已更改,因此无法保存。
我已尝试在TestCaseInlineFormSet上覆盖has_changed()但是它没有解决问题 - 似乎从不调用formset的has_changed()?
知道如何解决这个问题吗?