Skip to main content
 首页 » 编程设计

python之Google App Engine 上的 Django Form 继承

2025年05月04日20小虾米

我需要继承一种基于另一种形式的形式,如 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')