"Album.singer" должен быть экземпляром "Singer" - PullRequest
0 голосов
/ 10 октября 2019

Tracebck

Пожалуйста, обратитесь по этой ссылке для трассировки обратно

2. Даже когда я изменил имя метки в forms.py, оно принимает имя по умолчанию, которое я пробовал Этот кодчтобы исправить это, но не решить. name = forms.CharField(label='Singer')

forms.py

class AlbumForm(forms.ModelForm):
    title = forms.CharField(max_length=50,label='Album title')

    class Meta:
        model=Album
        exclude = ['singer']

class SingerForm(forms.ModelForm):

    class Meta:
        model = Singer
        fields = ['name']
        label = {'name':'Singer'}

views.py

class AlbumSinger(View):
    def get(self,request,pk=None):
        singer_form = SingerForm(instance=Singer())
        album_form = AlbumForm(instance=Album())
        context = {
            'singer_form':singer_form,
            'album_form':album_form
        }
        return render(request, 'album/multi_form.html', context)

    def post(self,request,pk=None):
        context = {}
        singer_form = SingerForm(request.POST,instance=Singer())
        album_form = AlbumForm(request.POST,instance=Album())
        if singer_form.is_valid and album_form.is_valid:
            singer_form.save()
            new_album = album_form.save(commit=False)
            new_album.singer = singer_form
            new_album.save()
            return HttpResponseRedirect('/album/')
        context = {
            'singer_form' : singer_form,
            'album_form' : album_form
        }
        return render(request, 'album/multi_form.html', context)

1 Ответ

1 голос
/ 10 октября 2019

Попробуйте,

if singer_form.is_valid and album_form.is_valid:
    <b>singer_instance = singer_form.save() # assign the created instance to a variable</b>
    new_album = album_form.save(commit=False)
    <b>new_album.singer = singer_instance # use the model instance</b>
    new_album.save()
...