【发布时间】:2011-10-22 18:21:26
【问题描述】:
我需要在管理员中覆盖内联的保存方法。保存照片时,我需要将用户 ID 添加到 DB 列。我无法在模型中制作它,因为那里没有请求数据。我怎样才能在管理员中做到这一点,以某种方式获取 nad set user id?
【问题讨论】:
标签: django django-admin inlines
我需要在管理员中覆盖内联的保存方法。保存照片时,我需要将用户 ID 添加到 DB 列。我无法在模型中制作它,因为那里没有请求数据。我怎样才能在管理员中做到这一点,以某种方式获取 nad set user id?
【问题讨论】:
标签: django django-admin inlines
我相信你应该使用 ModelAdmin 上的 save_formset 方法:
class ArticleAdmin(admin.ModelAdmin):
def save_formset(self, request, form, formset, change):
instances = formset.save(commit=False)
for instance in instances:
instance.user = request.user
instance.save()
formset.save_m2m()
【讨论】:
我对 django (1.8) 比较陌生,并且使用上述覆盖:
def save_formset(self, request, form, formset, change):
instances = formset.save(commit=False) # gets instance from memory and add to it before saving it
for obj in formset.deleted_objects:
obj.delete()
for instance in instances:
for form in formset: # cleaned_data is only available on the form, so you have to iterate over formset
instance.modified_by = request.user
instance.created_by = request.user
instance.lowercase_enum_value_en = form.cleaned_data['enum_value_en'].lower()
instance.save()
formset.save_m2m()
即在保存实例和表单之前添加它,但是当用户输入 2 行时,它总是保存最后的cleaned_data['enum_value_en']。
【讨论】: