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

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

Войти через центр авторизации
Похожие вопросы
26 апр. 2024, в 07:47
2000 руб./за проект
26 апр. 2024, в 06:46
1000 руб./в час
26 апр. 2024, в 05:31
1000 руб./за проект