【发布时间】:2020-07-17 23:14:08
【问题描述】:
我有一个 django CreateView,用户可以在其中创建新单词。我还有一个不相关的Song 模型,用户可以在其中选择从歌曲的歌词中添加单词。所以我为此创建了一个单独的CreateView,这样我就可以有一个不同的成功网址。成功 url 应该返回到用户正在浏览的歌曲。但我正在努力弄清楚如何将这个特定对象的 pk 传递给不同模型的 CreateView。
这是我的特别CreateView:
class CreateWordFromSong(LoginRequiredMixin, generic.CreateView):
template_name = 'vocab/add_custom_initial.html'
fields = ("target_word","source_word", etc.)
model = models.Word
from videos.models import Song
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.user = self.request.user
self.object.save()
return super(CreateWordFromSong, self).form_valid(form)
success_url = reverse_lazy('videos:song-vocab', kwargs={'pk': song_pk) #how to get song_pk?
当我用实际的 pk 替换 song_pk 时,一切正常。
我覆盖form_valid 以便用户可以保存新对象。也许有一种方法可以改变它,以便我也可以获得song_pk?我已经玩了一点,但没有运气。
我从我的网址获得了song_pk:
path('song/<int:song_pk>/', views.CreateWordFromSong.as_view(), name='create-song'),
所以我应该可以访问它。但是当我尝试将它添加到我的视图中时:
class CreateWordFromSong(LoginRequiredMixin, generic.CreateView, song_pk)
我收到错误:name 'song_pk' is not defined。
【问题讨论】:
-
self.kwargs.get('song_pk')
-
@Blackdoor 我试过了,但后来我得到了
NameError: name 'self' is not defined -
覆盖get_success_url(self)函数返回success_url
标签: python django django-models django-forms django-views