Django-向用户显示与当前URL对应的对象

时间:2019-02-25 12:03:22

标签: django django-forms django-templates django-views

对误导性标题表示歉意;假设我有这种链接:

<div class="col-md-3">
       <a class="btn btn-success" href="{% url 'rental-create' car.pk %}">Order this car!</a>
</div>

这会导致我用来处理汽车定购的视图

class RentalCreateView(LoginRequiredMixin, SuccessMessageMixin, CreateView):
    form_class = RentalCreateForm
    template_name = 'rentals/rental_create.html'
    success_message = 'Created'
    context_object_name = 'order'

    def get_success_url(self):
        return reverse('rental-detail', kwargs={'pk': self.object.pk})

    def form_valid(self, form):
        form.instance.profile = self.request.user.profile
        car = Car.objects.get(pk=self.kwargs['pk'])
        form.instance.car = car
        return super().form_valid(form)

现在,我想简单地在模板中或直接按照上面定义的形式使用对象(汽车)pk

如您所见,我设法通过form_valid方法访问此变量:

car = Car.objects.get(pk=self.kwargs['pk'])

但是,此机制仅确保将实例保存到数据库后,汽车将与请求的URL中的相同。

我的意思是在模板中或作为不可编辑的表单字段使用汽车对象(对应于 / rental / new / 1 / 这样的url)。

简要-我想向用户展示他正在订购的当前汽车。

这是我的表格。py

class RentalCreateForm(ModelForm):
    class Meta:
        model = Rental
        fields = ('start_date', 'end_date', 'additional_info',)
        exclude = ('profile', 'paid')
        widgets = {
            'start_date': DateInput(),
            'end_date': DateInput()
        }

Django是否提供一种简单的方法来实现这一目标?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您可以在get_context_data方法中添加额外的上下文。

def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    context['car'] = get_object_or_404(Car, pk=self.kwargs['pk']
    return context

请注意,我已使用get_object_or_404,以便在汽车不存在时获得404页面。如果您使用get(),则CarDoesNotExist异常将导致500服务器错误。

现在您可以在模板中访问{{ car }}