Наследование форм Django в Google App Engine - PullRequest
2 голосов
/ 23 ноября 2010

Мне нужно наследовать одну форму на основе другой, как описано в Документация Django . Я создал следующий код:

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

Я печатаю эту форму и вижу похожие результаты - показаны два поля - имя и слаг. Но ожидалось одно поле «имя» в результате рендеринга BlogEditForm.

ПРИМЕЧАНИЕ , на котором я запускаю этот код Google App Engine с Django 1.2.1 .

Теперь я использовал форму без наследования, и это хорошо работает:

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

Я думаю, что текущая ситуация основана на реализации Google App Engine форм Patcher.

1 Ответ

0 голосов
/ 02 февраля 2011

Возможно, было бы более целесообразно выделить метод 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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...