lxstvayne
@lxstvayne
Люблю Python

Как связать две формы в Django?

Я хочу создать форму, через которую можно было бы добавлять объект Lecture, но не знаю как правильно связать две модели в одной форме. Вот код, который у меня есть:
models.py
from django.contrib.postgres.fields import ArrayField
from django.db import models


class Content(models.Model):
    text = models.TextField(blank=True)
    videos = ArrayField(
        models.FileField(),
        blank=True
    )
    photos = ArrayField(
        models.ImageField(),
        blank=True
    )
    audios = ArrayField(
        models.FileField(),
        blank=True
    )


class Lecture(models.Model):
    subject = models.CharField(max_length=50)
    topic = models.CharField(max_length=100)
    content = models.ForeignKey(Content, on_delete=models.CASCADE)
    lecturer = models.CharField(max_length=50)
    date = models.DateField()
    faculty = models.CharField(max_length=100)
    direction = models.CharField(max_length=100)

forms.py
from django import forms

from .models import Lecture, Content


class AddContentForm(forms.ModelForm):
    class Meta:
        model = Content
        fields = '__all__'


class AddLectureForm(forms.ModelForm):
    class Meta:
        model = Lecture
        fields = '__all__'


Как в форме AddLectureForm добавить форму AddContentForm, чтобы в таком шаблоне всё верно отображалось?
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="{% url 'add_lecture' %}" method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Добавить</button>
</form>
</body>
</html>
  • Вопрос задан
  • 1154 просмотра
Решения вопроса 1
AlexNest
@AlexNest
Работаю с Python/Django
Добавьте вторую также как и первую:
article_form = AddLectureForm()
        content_form = AddContentForm()

    context = {
        'article_form ': article_form,
        'content_form ': content_form 
    }
    return render(request, 'main/render.html', context)

<form method="post" enctype="multipart/form-data">
    {% csrf_token %}
    {{ form_one.as_p }}
    {{ form_two.as_p }}
    <input type="submit" value="ok">
</form>


Конкретно, это чисто пример вывода форм. Обрабатывать две формы нужно также как и одну, только после сохранения первой из нее нужно получить id и передать во вторую.
P.S.:
Конкретно может помочь раздел про метод save()
В коментах несколько моментов относительно текущей реализации.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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