在Django InlineModelAdmin上覆盖save_model [英] Override save_model on Django InlineModelAdmin
问题描述
我有一个模型,需要从当前登录的用户自动填充用户
字段。我可以按照这里的规定工作c $ c> user 字段在标准的ModalAdmin中,但是如果我正在使用的模型是在一个 InlineModelAdmin
,并从Admin中的另一个模型的记录中保存,它赢了
这是我认为最好的解决方案。给我一段时间找到它...这个答案给了我一些线索: https://stackoverflow.com/a/24462173/2453104
在你的admin.py:
class YourInline(admin.TabularInline):
pre>
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
您的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 theuser
field is in a standard ModalAdmin, but if the model I'm working with is in anInlineModelAdmin
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屋!