【问题标题】:How to access inline data in django ModelAdmin如何在 django ModelAdmin 中访问内联数据
【发布时间】:2013-10-11 21:52:39
【问题描述】:

我需要处理以 django 管理表单上传的文件。我在表单中添加了一个文件上传字段:

class ExampleInline(admin.TabularInline):
    model = OtherExample
    extra = 1
class ExampleForm(forms.ModelForm):
    filedata = forms.FileField()
    class Meta:
        model = ExampleModel
class ExampleModelAdmin(admin.ModelAdmin):
    form = ExampleForm
    inlines = [ExampleInline,]

这会完全按照我想要的方式呈现表单。 Request 中返回的数据正是我所期望的。

问题是我想访问内联的内容。

class ExampleAdmin(admin.ModelAdmin):
...
def save_model(self, Request, obj, form, change):
   the_file = form.cleaned_data['filedata']
   # do amazing things to contents of file

此时我想参考用户在内联中选择的结果。无论他们为 OtherExample 选择了什么。

如何通过表单访问它?我宁愿不通过请求,但愿意这样做。我也愿意检查save_related(self,request, form, formset, change)

【问题讨论】:

    标签: django django-models django-forms django-admin


    【解决方案1】:

    save_related 可以做到这一点,虽然它是在保存表单之后调用的,所以你最终会保存对象两次。您可以通过form.instance 或formset.instance 访问该对象。

    def save_related(self, request, form, formsets, change):
        obj = form.instance
        # whatever your formset dependent logic is to change obj.filedata
        obj.save()
        super(ExampleAdmin, self).save_related(request, form, formsets, change)
    

    【讨论】:

    • 谢谢,我已经了解了必须使用的save_related,但是formset 中的OtherExample 在哪里?
    • 如果您从内联表单集中读取数据,您可能希望查看每个表单的cleaned_data dict。或者完全覆盖内置的save_related 和save_formset,这样您就可以捕获保存表单集的结果,这将是更改或创建的OtherExample 实例。
    • 就是这样:formset[0].cleaned_data 在save_related() 中保存了我需要的数据。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    • 2023-03-13
    • 2011-02-12
    • 2017-05-24
    • 1970-01-01
    • 2010-10-31
    • 2015-01-26
    相关资源
    最近更新 更多