Я пытаюсь предварительно заполнить ModelForm и inlineformset_factory экземпляром Model, НО, когда пользователь отправляет форму, мне нужно создать новый экземпляр Model и связанные дочерние записи.
Пример модели:
class Artist(models.Model):
artist = models.CharField(max_length=100)
class Song(models.Model):
artist = models.ForeignKey(Artist)
song = models.CharField(max_length=200)
Я хочу, чтобы пользователь увидел форму редактирования, основанную на экземпляре Artist, вместе с InlineFormSet для композиций, связанных с этим Artist. Форма будет предварительно заполнена существующими данными, и пользователь сможет изменить имя исполнителя и названия песен. Однако, когда пользователь отправляет форму, я не хочу перезаписывать существующие записи. Вместо этого я хочу создать новый экземпляр Artist и добавить новые песни для этого нового исполнителя.
Я попытался установить первичный ключ Artist в None перед сохранением - и это вызывает новый экземпляр Artist. Однако я теряю отношения ForeignKey между исполнителями и песнями.
Пример просмотра:
def edit(request, artist_id=None):
if artist_id == None:
artistsubmission = Artist()
else:
artistsubmission = Artist.objects.get(id = artist_id)
artistsubmission.pk = None
if request.method == 'POST':
form = ArtistEditForm(request.POST, instance=artistsubmission)
formset = SongFormSet(request.POST, instance=artistsubmission)
if form.is_valid() and formset.is_valid():
form.save()
formset.save()
return HttpResponseRedirect('/success/')
else:
form = ArtistEditForm(instance=artistsubmission)
formset = SongFormSet(instance=artistsubmission)
return render_to_response('edit.html', {'form':form, 'formset':formset})