是否在Django管理页面中收集其他信息?

是否在Django管理页面中收集其他信息?,django,django-admin,django-forms,django-urls,Django,Django Admin,Django Forms,Django Urls,在保存时,如果用户选择某个选项,我想将用户带到一个页面,在该页面中,他可以再填写一个字段,然后重定向到管理员默认页面,而不是重定向到创建和更新页面使用的新页面。这使您可以向modelform添加其他字段,从而将所有表单处理保持在一个位置 首先,您需要设置ModelAdmin以使用自定义表单: admin.py from django.contrib import admin from forms import BookAdminForm from models import Book clas

在保存时,如果用户选择某个选项,我想将用户带到一个页面,在该页面中,他可以再填写一个字段,然后重定向到管理员默认页面,而不是重定向到创建和更新页面使用的新页面。这使您可以向modelform添加其他字段,从而将所有表单处理保持在一个位置

首先,您需要设置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)
from django import forms

class BookAdminForm(forms.ModelForm):
    additional_field = forms.CharField(max_length=100)

    class Meta:
        model = Book
forms.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)
from django import forms

class BookAdminForm(forms.ModelForm):
    additional_field = forms.CharField(max_length=100)

    class Meta:
        model = Book
接下来,您需要检查是否选择了“特定选项”,然后适当地处理额外字段。在课堂上,你需要这样的东西:

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中使用方法,而不是重定向到创建和更新页面使用的新页面。这使您可以向modelform添加其他字段,从而将所有表单处理保持在一个位置

首先,您需要设置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)
from django import forms

class BookAdminForm(forms.ModelForm):
    additional_field = forms.CharField(max_length=100)

    class Meta:
        model = Book
forms.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)
from django import forms

class BookAdminForm(forms.ModelForm):
    additional_field = forms.CharField(max_length=100)

    class Meta:
        model = Book
接下来,您需要检查是否选择了“特定选项”,然后适当地处理额外字段。在课堂上,你需要这样的东西:

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中重写方法。

最好在此处重写admin类的save_model方法,而不是form.save,假设您可能需要重定向用户。在这里,我每次都会显示附加字段。但我希望在出现特定条件时才显示它。我正在使用javascript进行此操作,但希望进行更改。您超出了django管理员的范围。管理的全部要点是立即有一个功能模型管理,开箱即用。javascript路由是一个不错的解决方案。最好在这里重写admin类的save_model方法,而不是form.save,假设您可能需要重定向用户。在这里,我每次都会显示附加字段。但我希望在出现特定条件时才显示它。我正在使用javascript进行此操作,但希望进行更改。您超出了django管理员的范围。管理的全部要点是立即有一个功能模型管理,开箱即用。javascript路由是一个不错的解决方案。