对误导性标题表示歉意;假设我有这种链接:
<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是否提供一种简单的方法来实现这一目标?任何帮助将不胜感激。
答案 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 }}
。