【问题标题】:Collecting additional information in the Django administration page?在 Django 管理页面中收集其他信息?
【发布时间】:2010-10-27 20:34:35
【问题描述】:

如果用户选择某个选项,则保存时我想将用户带到一个页面,在该页面他可以再填写一个字段,然后重定向到管理员默认页面

【问题讨论】:

    标签: django django-admin django-forms django-urls


    【解决方案1】:

    您可以简单地使用创建和更新页面使用的override the form 而不是重定向到新页面。这使您可以向模型表单添加其他字段,将所有表单处理集中在一个地方。

    首先,您需要设置您的 ModelAdmin 以使用自定义表单:

    admin.py

    from django.contrib import admin
    from forms import BookAdminForm
    from models import Book
    
    class BookAdmin(admin.ModelAdmin):
        form = BookAdminForm
    
    admin.site.register(Book, BookAdmin)
    

    forms.py

    from django import forms
    
    class BookAdminForm(forms.ModelForm):
        additional_field = forms.CharField(max_length=100)
    
        class Meta:
            model = Book
    

    接下来,您需要override the save method 检查是否选择了“某些选项”,然后适当地处理额外的字段。在你的班级里,你需要这样的东西:

    def save(self, *args, **kwargs):
        if self.cleaned_data['certain_field'].value == 'certain option':
            # process additional_field
        # don't forget to call super to save the rest of the form
        super(BookAdminForm, self).save(*arg, **kwargs)
    

    注意:此代码未经测试,但它应该为您指明正确的方向。

    也可以在ModelAdmin中override the save_model()方法。

    【讨论】:

    • 在此处覆盖管理类的 save_model 方法可能比 form.save 更好,因为您可能需要执行重定向用户等操作。
    • 在此我每次都显示附加字段。但我希望在有特定条件时才显示它。我为此使用javascript,但想更改。
    • 你已经超出了 django 管理员的范围。管理员的重点是立即拥有一个功能模型管理员,开箱即用。 javascript 路由不是一个糟糕的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2016-03-09
    • 1970-01-01
    • 1970-01-01
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多