Django在Google App Engine上进行表单继承

时间:2010-11-23 17:39:18

标签: python django google-app-engine django-forms

我需要继承一个基于另一个的表单,如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实施表单修补程序。

1 个答案:

答案 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')