为了账号安全,请及时绑定邮箱和手机立即绑定

我在 /car/offer/4/ 处收到 ValueError Cannot allocate

我在 /car/offer/4/ 处收到 ValueError Cannot allocate

陪伴而非守候 2024-01-16 10:31:50
我正在 django 为 uber 司机开发一个汽车租赁网站,从详细视图我需要司机能够选择他们的租赁期限,其他信息将自动填写到我的views.py的表格中,我能够为了通过request.user获取司机,我还需要租赁汽车的PK。在这里搜索时,我尝试了这里人们的各种建议,但我不断收到一个又一个错误......使用 self.kwargs['pk']结果ValueError at /car/offer/4/ Cannot assign "4": "CarRent.car" must be a "Car" instance.然后我尝试使用 form.car = Car.objects.get(pk= self.kwargs.get('pk'))它的结果AttributeError at /car/offer/4/ 'CarRent' object has no attribute 'is_valid'有人可以告诉我如何获取 CarRent 模型中保存的汽车实例吗?任何帮助将不胜感激。谢谢下面是我的代码(减少到相关位)models.pyclass Car(models.Model):    car_owner = models.ForeignKey(User, related_name='car_owner', on_delete=models.CASCADE)class CarRent(models.Model):    car = models.ForeignKey(Car, related_name='rented_car', on_delete=models.CASCADE)    driver = models.ForeignKey(User, related_name='driver_renting', on_delete=models.CASCADE)    rented_weeks = models.BigIntegerField(default=1, choices=WEEK_CHOICES)forms.pyclass RentForm(forms.ModelForm):    class Meta:        model = CarRent        fields = ['rented_weeks']我只显示租用的周数,因为这是我需要用户提供的唯一信息。views.pyclass CarView(FormMixin, DetailView):    model = Car    form_class = RentForm    def get_success_url(self):        return reverse('car-details', kwargs={'pk': self.object.pk})    def post(self, request, *args, **kwargs):        if not request.user.is_authenticated:            return HttpResponseForbidden()        self.object = self.get_object()        form = self.get_form()        form = form.save(commit=False)              form.car = self.kwargs['pk']        form.driver = request.user        if form.is_valid():            return self.form_valid(form)        else:            return self.form_invalid(form)    def form_valid(self, form):        form.save()        return super().form_valid(form)
查看完整描述

1 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

form.car需要一个Car对象,而不是带有主键的字符串,但您可以简单地使用:


from django.contrib.auth.mixins import LoginRequiredMixin


class CarView(LoginRequiredMixin, FormMixin, DetailView):

    # …


    def post(self, request, *args, **kwargs):

            form = self.get_form()

            self.object = self.get_object()

            if form.is_valid():

                return self.form_valid(form)

            else:

                return self.form_invalid(form)

    

    def form_valid(self, form):

        form.instance.car_id = self.kwargs['pk']

        form.instance.driver = self.request.user

        form.save()

        return super().form_valid(form)

注意:您可以使用LoginRequiredMixinmixin [Django-doc]将视图限制为基于类的视图,以供经过身份验证的用户使用 。


注意:通常使用settings.AUTH_USER_MODEL[Django-doc]来引用用户模型比直接使用User模型 [Django-doc]更好。有关详细信息,您可以参阅文档的参考User模型部分。


查看完整回答
反对 回复 2024-01-16
  • 1 回答
  • 0 关注
  • 112 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信