Skip to main content
 首页 » 编程设计

python之跨模板 django 传递对象主键

2025年02月15日38artech

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)