Django Admin内联formset的初始数据未保存

时间:2018-05-04 12:58:25

标签: django django-forms django-admin

我试图在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()?

知道如何解决这个问题吗?

0 个答案:

没有答案