Сохраните новый внешний ключ с помощью формы django

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

class Studio(models.Model):
    name = models.CharField("Studio", max_length=30, unique=True)

class Film(models.Model):
    studio = models.ForeignKey(Studio, verbose_name="Studio")
    name = models.CharField("Film Name", max_length=30, unique=True)

У меня есть форма Film, которая позволяет пользователю выбрать уже существующую студию или ввести новую one:

class FilmForm(forms.Form):
    studio = forms.ModelChoiceField(Studio.objects, required=False)
    new_studio = forms.CharField(max_length=30, required=False, label = "New Studio Name")
    name = forms.CharField(max_length=30, label = "Film Name")

Есть проверка, чтобы гарантировать, что имя new_studio еще не существует. Если пользователь вводит new_studio, я хочу сохранить студию, а затем сохранить новый фильм.

form = FilmForm(request.POST) 
if form.is_valid(): # All validation rules pass
    std = Studio(name = form.cleaned_data['new_studio'])
    std.save()

Но тогда как мне сохранить фильм экземпляр с новым идентификатором студии? Я видел этот вопрос , но что, если у меня гораздо больше полей в модели фильма и форме фильма? Если я использую связанный ответ, мне придется ввести каждое поле:

studio = Studio.objects.get(name=request.POST['new_studio'])
newFilm=Film(name=form.name, studio=studio, field_one = form.field_one, field_two = form.field_two, etc.)

Как правильно это реализовать?

5
задан Community 23 May 2017 в 12:32
поделиться