Django管理模型的不同形式

时间:2013-10-25 10:53:30

标签: 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
        fields = ('name', 'birth_date')

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

2 个答案:

答案 0 :(得分:0)

您始终可以为ModelAdmin类提供自己的表单类:https://docs.djangoproject.com/en/1.5/ref/contrib/admin/#django.contrib.admin.ModelAdmin.form

从那里你可以按键访问字段,就像任何其他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']

答案 1 :(得分:0)

在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:表单初始化时。 ____init____方法将致电。

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

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