Джанго: можно ли проверять и сохранять поля нескольких форм в одном универсальном представлении? - PullRequest
3 голосов
/ 21 мая 2011

У меня есть 2 модели:

class Person( models.Model ):
  username = models.CharField
  name = models.CharField( max_length = 30 )
  surname = models.CharFields( max_length = 30 )
  ...

class PersonSkills( models.Model ):
  person = models.ForeignKey( Person )
  skill = models.CharField( max_length = 30 )
  ...

Я хотел бы добавить данные для Person и PersonSkills в одном представлении.

Теперь у меня есть RegisterView следующим образом:

class RegisterForm( ModelForm ):
    class Meta:
        model = Person
        fields = ( 'username', 'name', 'surname', 'password', )

class RegisterView( FormView ):
    form_class = RegisterForm
    success_url = "/welcome/"
    template_name = "register.tmpl"
    is_valid = True
    def form_valid( self, form ):       
        form.save()
        self.is_valid = True
        return super( RegisterView, self ).form_valid( form )
    def form_invalid( self, form ):
        self.is_valid = False       
        return super( RegisterView, self).form_invalid( form )
    ...

Так как я могу добавить данные для Person и PersonSkills в одном представлении?Наследование от FormView допускает только один класс form_class.

1 Ответ

1 голос
/ 21 мая 2011

Лучший способ достичь желаемого - создать пользовательскую форму, которая объявляет поля, необходимые для обеих моделей. Используйте метод save формы для сохранения в отдельных классах модели, получая доступ к полям в cleaned_data.

Тогда ваш FormView будет работать как положено. Он будет получать входные данные для двух разных моделей, но логика полностью содержится в форме. Как и во всех пользовательских формах, поместите логику проверки в различные *clean* методы.

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