2010-11-23 5 views
2

J'ai besoin d'hériter d'un formulaire basé sur un autre comme décrit dans Django documentation. J'ai créé le code suivant:Django Formulaire d'héritage sur Google App Engine

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

J'imprime ces formes et vois des résultats semblables - montrés deux champs - nom et limace. Mais attendu un champ "nom" en résultat du rendu BlogEditForm.

NOTE que je lance ce code sur Google App Engine avec Django 1.2.1.

Maintenant, j'ai utilisé forme sans héritage et ce travail bien:

class BlogEditForm(forms.ModelForm): 
    class Meta: 
     model = Blog 
     exclude = ('author', 'slug') 

Je pense que la situation actuelle basée sur Google App Engine mise en œuvre des formes patcher.

+0

En savoir plus sur djangoforms patcher dans Google App Engine - http://code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/ext/db/djangoforms.py. –

+0

Qui a des idées sur la façon de résoudre ce problème? –

Répondre

0

Il serait probablement plus judicieux de séparer la méthode clean_slug de la classe BlogCreateForm, car c'est la seule chose qui est vraiment réutilisée. Faire quelque chose comme ce qui suit devrait obtenir ce que vous voulez.

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') 
+0

Oui, vous avez raison. J'ai trouvé cette solution pour le moment. Je vous remercie. Cela marche! –