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完成此操作,但这不是一个好的实践,我想你肯定可以。但有时服务器端处理是管理表单相关内容的好方法。