使用 CreateView django 将对象添加到特定的外键

Adding an object to a specific foreign key using CreateView django

我的观点:

class SongCreate(CreateView):
    model = Song
    fields = ['album', 'name']

我将歌曲 (this) 添加到专辑的功能位于专辑 A 的详细信息模板中。但是,我希望输入的只是名称而不是专辑,因为歌曲的专辑应该自动为 "A." 如何让上面的代码表现得像这样?

来自我的网址:

url(r'album/(?P<pk>[0-9]+)/song/add/$', views.SongCreate.as_view(), name='song-add') 

您可以使用get_initial方法:

class SongCreate(CreateView):
    model = Song
    fields = ['album', 'name']

    def get_initial(self):
        return {
            'album': Album.objects.get(id=self.kwargs.get('pk')),
        }

或者您可以使用form_valid方法:

class SongCreate(CreateView):
    model = Song
    fields = ['name']

    def form_valid(self, form):
        form.instance.album = Album.objects.get(id=self.kwargs.get('pk'))
        return super(SongCreate, self).form_valid(form)