Шаблоны проектирования Django - формы для создания и обновления модели - PullRequest
5 голосов
/ 02 января 2011

Предположим, я хочу создать и обновить модель.Какие поля отображаются, и тип проверки зависит от действия (создание или обновление).Но они все еще имеют много общего и функциональности.Есть ли чистый способ заставить ModelForm обрабатывать это (кроме случаев, когда экземпляр существует везде), или мне просто создать две разные формы модели?

1 Ответ

4 голосов
/ 02 января 2011

На ум приходят две возможности.Вы можете установить атрибут в методе __init__ формы, либо на основе параметра, который вы явно передаете, либо на основании того, существует ли self.instance и имеет ли он ненулевой pk:

class MyModelForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        # either:
        self.edit = kwargs.pop('edit', False)
        # or:
        self.edit = hasattr(self, instance) and self.instance.pk is not None
        super(MyModelForm, self).__init__(*args, **kwargs)
        # now modify self.fields dependent on the value of self.edit

Другойвариант заключается в создании подкласса вашей модели: сохраните совместную функциональность в базовом классе, а затем определенную функциональность создания или обновления в подклассах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...