我需要继承一种基于另一种形式的形式,如 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')
我打印此表单并看到类似的结果 - 显示两个字段 - name 和 slug。但在呈现 BlogEditForm 的结果中需要一个字段“名称”。
注意我在 Google App Engine 上使用 Django 1.2.1 运行此代码。
现在我已经使用了没有继承的表单,而且效果很好:
class BlogEditForm(forms.ModelForm):
class Meta:
model = Blog
exclude = ('author', 'slug')
我认为目前的情况是基于 Google App Engine 实现的表单修补程序。
请您参考如下方法:
从 BlogCreateForm 类中分离出 clean_slug 方法可能更有意义,因为这是唯一真正被重用的东西。执行以下操作应该会得到您想要的结果。
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')
