@Razer1511

Создание формы из двух моделей в Django?

Всем привет. Начинаю активно изучать Django. Столкнулся с проблемой и не нашёл ответа. Как создать форму из двух связанных моделей в Django?

models.py
class ClassName(models.Model):
    class_number = models.PositiveSmallIntegerField('Класс')
    class_name = models.CharField('Буква', max_length=1)

class Student(models.Model):
    classes = models.OneToOneField(ClassName, on_delete=models.CASCADE, primary_key=True)
    first_name = models.CharField('Имя', max_length=30)
    last_name = models.CharField('Фамилия', max_length=30)
    email = models.EmailField('Электронная почта')
    password = models.CharField('Пароль', max_length=30)


forms.py
class Registration(ModelForm):
    class Meta:
        model = Student
        fields = ['first_name', 'last_name', 'email', 'password']

class Classes(ModelForm):
    class Meta:
        model = ClassName
        fields = ['class_number', 'class_name']


Вопрос вроде бы простой. Что писать в файле views.py ( проверка на валидность и совместную работу ) ?
  • Вопрос задан
  • 349 просмотров
Пригласить эксперта
Ответы на вопрос 3
sergey-gornostaev
@sergey-gornostaev Куратор тега Django
Седой и строгий
Продолжайте активно изучать. К тому моменту, как полностью дочитаете документацию Django, вопросов больше остаться не должно.
Ответ написан
Комментировать
IDzone-x
@IDzone-x
Костыли сила паттерны могила
Ну в книжке "Django2 на примерах" повню было что-то подобное можете поискать. Где-то от 110 страницы:)

P.S если за хотите могу скинуть
Ответ написан
Комментировать
@buslay
Можно немного модифицировать FormView из django.views.generic.edit, и во View наследоваться от нового класса.

Основная идея - в одном вью обрабатывать (создавать контекст, делать валидацию) для произвольного количества форм:

Пример использования views.py:
class CompanyCreatePrivateView(MultiFormCreate):
    template_name = 'company/company_create_private.html'
    formconf = {
        'company': {'formclass': CompanyCreatePrivateForm},
        'person': {'formclass': PersonCompanyCreateForm},
        'phone': {'formclass': PhoneNumberMaskedCreateForm},
        'companycontact': {'formclass': CompanyContactForm},
    }


В шаблоне контекст каждой формы будет не в form, а в forms.{имя формы}

Если создание объектов следующей формы зависит от создания объекта предыдущей - во вью придется переопределить метод forms_valid() и сохранять объекты "вручную".

P.S. готовый миксин MultiFormCreate не стал выкладывать, много текста..
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы