python/django 的新手。我正在使用基于类的 View 。我有一个名为 Video 的对象,我希望能够为其创建评级。我有一个用于 Video 的 DetailView,在同一页面上我有一个链接,可以将您带到另一个页面来评价 Video在 DetailView 上(因为我还不想弄乱 Mixins,还不想把它们都放在同一个页面上)。
如何保留/获取对 DetailView Video 对象的引用,以便在我提交评级时它知道评级是针对 Video DetailView 上的对象?
模型.py
class Video(models.Model):
title = models.CharField(max_length=100, default="Community Video ")
class Rating(models.Model):
rate_choice = ((1, '1'), (2, '2'), (3, '3'), (4, '4'), (5, '5'))
rate_value = models.IntegerField(default=5, choices=rate_choice)
video = models.ForeignKey('Video', related_name='video', null=True, default=1)
View .py
class VideoView(DetailView):
model = Video
template_name = 'video_view.html'
class RatingView(CreateView):
model = Rating
template_name = 'rating_create.html'
fields = ['rate_value', 'video']
基本上,当我从 video_view 转到 rating_create 模板时,我希望 Video 的主键与我一起使用。我正在考虑只使用基于函数的 View ,类 View 让我感到困惑。
urls.py:
urlpatterns = [
url(r'^upload', UploadVideo.as_view(), name='upload'),
url(r'^(?P<pk>[0-9]+)/$', VideoView.as_view(), name='videoview'),
url(r'^(?P<pk>[0-9]+)/ratings', RatingView.as_view(success_url='success_yea'), name='rating_view'),
url(r'^success', upload, name='success_yea')
]
请您参考如下方法:
您可以将其作为参数传递到您的 urls.py 中,例如
url(r'^(?P<pk>[0-9]+)/ratings', RatingView.as_view(),
在 video_view.html 模板文件中用当前视频 ID 反转它。
然后在你看来:
class RatingView(CreateView):
model = Rating
template_name = 'rating_create.html'
fields = ['rate_value']
success_url = reverse_lazy('success_yea')
def form_valid(self, form):
form.instance.video = get_object_or_404(Video, id=self.kwargs.get('pk'))
return super(RatingView, self).form_valid(form)
