Django管理模型的不同形式

Django管理模型的不同形式,django,django-models,django-forms,django-admin,django-mptt,Django,Django Models,Django Forms,Django Admin,Django Mptt,根据需要更新的对象,是否可以加载不同的管理表单来编辑对象 例如,我们有一个MPTTModelAdmin对象。对于根对象,我们不希望看到一些字段: class RootObjectForm(ModelForm): class Meta: model = Author exclude = ('title',) class ChildObjectForm(ModelForm): class Meta: model = Author

根据需要更新的对象,是否可以加载不同的管理表单来编辑对象

例如,我们有一个
MPTTModelAdmin
对象。对于根对象,我们不希望看到一些字段:

class RootObjectForm(ModelForm):
    class Meta:
        model = Author
        exclude = ('title',)


class ChildObjectForm(ModelForm):
    class Meta:
        model = Author
        fields = ('name', 'birth_date')

但是我不知道如何在forms.py或admin.py中获取对象字段。

您可以为ModelAdmin类提供自己的表单类:

从那里,您可以按键访问字段,就像任何其他Django表单一样:

class MyModelForm(forms.ModelForm):
    class Meta:
        model = MyModel

    def __init__(self, *args, **kwargs):
        super(MyModeForm, self).__init__(*args, **kwargs)

        # access whatever field by key
        # self.fields['field-name']

在forms.py文件中,可以分两个阶段获取对象字段及其值

1:提交表格时。 clean方法进行初始验证

def clean(self):
    """ validation of address form """
    cleaned_data = super(WebsiteAddressForm, self).clean()
    field1_value = self.cleaned_data.get("field1")
    print field1_value
    return cleaned_data
2:初始化表单时____初始化方法将调用

class MyForm(forms.ModelForm):
    class Meta:
        model = Model1

    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)
        #self.fields['field1']

抱歉,也许我不明白,但是下面的代码:from django.forms从mptt_test导入ModelForm.models导入类别类CategoryForm(ModelForm):class Meta:model=Category def_init__(self,*args,**kwargs):super(CategoryForm,self)。\u init__(*args,**kwargs)print self.fields['title']prints:\如果我试图访问特殊的标准MPTT字段,比如level(self.fields['level'])-我遇到了一个KeyError我对MPTT不是很熟悉…它是否有Django admin表单mixin或ModelAdmin应该继承的类?这可能解释了中缺少的字段.In有mptt.forms.MPTTAdminForm。。。但是类CategoryForm(MPTTAdminForm)不适用于。它仍然打印嗯。不幸的是,我今天没有时间帮助S.O.了,但我相信有人会知道为什么你不能访问特定于MPTT模型的字段。这样做。。。但是print self.fields['title']prints:那只是给你一个想法。在。self.fields['field1']=“嗨,这是默认值”我明白了。。。但是,当我们刚刚来到页面更新现有对象时,有什么方法可以获取字段值吗?例如,如果某些新闻包含“some_字段”,并且其值已设置为“1”-在管理编辑表单中,不显示此新闻的某些文件。在其他情况下-显示此字段我可以通过js完成此操作,但这不是一个好的实践,我想你肯定可以。但有时服务器端处理是管理表单相关内容的好方法。