@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 ( проверка на валидность и совместную работу ) ?
  • Вопрос задан
  • 43 просмотра
Пригласить эксперта
Ответы на вопрос 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 не стал выкладывать, много текста..
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
22 окт. 2020, в 06:46
3000 руб./за проект
21 окт. 2020, в 22:40
300 руб./за проект
21 окт. 2020, в 22:34
25000 руб./за проект