在Django InlineModelAdmin上覆盖save_model [英] Override save_model on Django InlineModelAdmin

查看:595
本文介绍了在Django InlineModelAdmin上覆盖save_model的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个模型,需要从当前登录的用户自动填充用户字段。我可以按照这里的规定工作c $ c> user 字段在标准的ModalAdmin中,但是如果我正在使用的模型是在一个 InlineModelAdmin ,并从Admin中的另一个模型的记录中保存,它赢了

解决方案

这是我认为最好的解决方案。给我一段时间找到它...这个答案给了我一些线索: https://stackoverflow.com/a/24462173/2453104



在你的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
pre>

您的forms.py:

  class YourInlineFormset(forms.models.BaseInlineFormSet):
def save_new(self,form,commit = True):
obj = super(YourInlineFormset,self).save_new(form,commit = False)
#在这里你可以从请求中添加任何你需要的东西
obj.user = self.request.user

如果提交:
obj.save()

return obj


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 field is in a standard ModalAdmin, but if the model I'm working with is in an InlineModelAdmin and being saved from the record of another model inside the Admin, it won't take.

解决方案

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

这篇关于在Django InlineModelAdmin上覆盖save_model的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆