我需要继承一个基于另一个的表单,如Django documentation中所述。我创建了下一个代码:
'''models'''
class Blog(db.Model):
slug = db.StringProperty('blog url', required=True)
name = db.StringProperty('blog name', required=True)
author = db.UserProperty(auto_current_user_add=True, required=True)
'''forms'''
class BlogCreateForm(forms.ModelForm):
class Meta:
model = Blog
exclude = ('author',)
def clean_slug(self):
return "something"
class BlogEditForm(BlogCreateForm):
class Meta(BlogCreateForm.Meta):
model = Blog
exclude = ('author', 'slug')
我打印此表单并看到类似的结果 - 显示两个字段 - 名称和slug。但是期望在渲染BlogEditForm的结果中有一个字段“名称”。
注意我使用 Django 1.2.1 在 Google App Engine 上运行此代码。
现在我使用了没有继承的表单,这很好用:
class BlogEditForm(forms.ModelForm):
class Meta:
model = Blog
exclude = ('author', 'slug')
我认为目前的情况基于Google App Engine实施表单修补程序。
答案 0 :(得分:0)
将clean_slug
方法从BlogCreateForm
类中分离出来可能更有意义,因为这是唯一真正被重用的方法。做以下事情应该得到你想要的东西。
class CleanForm(forms.ModelForm):
def clean_slug(self):
return "something"
class BlogCreateForm(CleanForm):
class Meta:
model = Blog
exclude = ('author',)
class BlogEditForm(CleanForm):
class Meta:
model = Blog
exclude = ('author', 'slug')