Override save_model on Django InlineModelAdmin

后端 未结 6 1634
星月不相逢
星月不相逢 2020-12-31 03:38

I have a model that has a user field that needs to be auto-populated from the currently logged in user. I can get it working as specified here if the user

6条回答
  •  清酒与你
    2020-12-31 04:29

    Here's what I think is the best solution. Took me a while to find it... this answer gave me the clues: https://stackoverflow.com/a/24462173/2453104

    On your admin.py:

    class YourInline(admin.TabularInline):
        model = YourInlineModel
        formset = YourInlineFormset
    
        def get_formset(self, request, obj=None, **kwargs):
            formset = super(YourInline, self).get_formset(request, obj, **kwargs)
            formset.request = request
            return formset
    

    On your forms.py:

    class YourInlineFormset(forms.models.BaseInlineFormSet):
        def save_new(self, form, commit=True):
            obj = super(YourInlineFormset, self).save_new(form, commit=False)
            # here you can add anything you need from the request
            obj.user = self.request.user
    
            if commit:
                obj.save()
    
            return obj
    

提交回复
热议问题