在Django管理列表视图中上载CSV文件,替换addobject按钮

2024-09-27 00:14:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我想替换管理页面列表视图中的addobject按钮。其基本思想是管理员可以下载数据库中所有模型的数据,使用工具编辑数据,然后重新加载为CSV文件。在

在列表视图中,我正在努力重写表单,作为设置

class SomeModelForm(forms.Form):
    csv_file = forms.FileField(required=False, label="please select a file")

class Meta:
    model = MyModel
    fields = '__all__'

class SomeModel(admin.ModelAdmin):
    change_list_template = 'admin/my_app/somemodel/change_list.html'

    form = SomeModelForm

    other stuff

更改管理员_列表.html重写如下:

^{pr2}$

以前SomeModel缺少类Meta,根据sebbs的响应,这是更新的。最初的错误已经解决,但现在管理页面显示上载和重置按钮,但没有用于文件上载的字段。在

干杯

根据sebb的输入进行编辑。谢谢塞布。 修复的错误是

< class ‘my_model.admin.SomeModelAdmin'>: (admin.E016) The value of 'form' must inherit from 'BaseModelForm'


Tags: 文件数据视图编辑列表modeladmin管理员
2条回答

在此,解决方案如下:

class SomeModelForm(forms.Form):
    csv_file = forms.FileField(required=False, label="please select a file")


class SomeModel(admin.ModelAdmin):
    change_list_template = 'admin/my_app/somemodel/change_list.html'

    def get_urls(self):
        urls = super().get_urls()
        my_urls = patterns("",
                           url(r"^upload_csv/$", self.upload_csv, name='upload_csv')
                       )
        return my_urls + urls

    urls = property(get_urls)

    def changelist_view(self, *args, **kwargs):
        view = super().changelist_view(*args, **kwargs)
        view.context_data['submit_csv_form'] = SomeModelForm
        return view

    def upload_csv(self, request):
        if request.method == 'POST':
            form = MineDifficultyResourceForm(request.POST, request.FILES)
            if form.is_valid():
                # process form

在模板被重写的情况下:

^{pr2}$

表单需要一些自定义验证,但这解决了定制管理页面的困难部分。在

要详细说明这是怎么回事:

  1. get_url被重写,这样就可以在管理页面中添加一个额外的端点,这个端点可以指向任何视图,在本例中,它指向upload\u csv

  2. 将重写changelist_视图以将表单信息附加到视图中

  3. 改变_列表.html模板块“object tools”被表单字段覆盖

希望其他人也能发现这一点。在

在你的类SomeModelForm中添加如下内容:

class Meta:
        model = YourModel
        fields = '__all__'

从形式。形式到窗体.ModelForm在

相关问题 更多 >

    热门问题