Я пытаюсь предварительно заполнить некоторые строки в Django Admin данными, передаваемыми как параметры запроса (в случае добавления нового объекта в БД).
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)
Данные предварительно хорошо заполнены этим решением, однако при попытке отправки возникает проблема: предварительно заполненные строки не помечаются как измененные, поэтому они не сохраняются.
Я пытался переопределить has_changed () в TestCaseInlineFormSet, однако это не решает проблему - похоже, has_changed () для набора форм никогда не вызывается?
Есть идеи, как это исправить?