Django如何仅在CBV列表视图中显示可用项?

2024-04-24 01:22:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个模型,CarBookingCarBooking模型中的ForeignKey字段。如果Car被预订,它仍然显示在Car列表中。你知道吗

我将Car模型中的is_available_car模型字段设置为default=True。如果Car已预订,则在取消预订之前不会显示。我有一个预订表单,如果Car被预订了,用户就不能预订它,并且它不会显示在CarListView

请帮帮我。非常感谢。你知道吗

型号.py

class Booking(models.Model):

    booking_name = models.CharField(max_length=240, null=False)
    customer_name = models.ForeignKey(Customer, on_delete=models.CASCADE, related_name='book_customers' )
    book_car = models.ForeignKey(Car, on_delete=models.CASCADE, related_name='book_car')
    booking_start_date = models.DateTimeField(auto_now_add=True, blank=False)
    booking_end_date = models.DateTimeField(blank=True, null=True)
    rental_price = models.IntegerField(blank=False, null=False)
    times_pick = models.TimeField(blank=True)
    is_approved = models.BooleanField(default=False)

    def __str__(self):
        return self.booking_name

    def get_absolute_url(self):
        return reverse("buggy_app:detail",kwargs={'pk':self.pk})

视图.py

class BookingView(FormView):
    template_name = 'buggy_app/booking.html'
    form_class = BookingForm
    model = Booking 
    success_url = reverse_lazy('index')

    def form_valid(self, form):
        form.save()
        return super(BookingView, self).form_valid(form)

    def get_context_data(self, **kwargs):
        # kwargs['car'] is the car booking now!
        try:
            kwargs['car'] = Car.objects.get(id=self.request.GET.get('car', ''))
        except (Car.DoesNotExist, ValueError):
            kwargs['car'] = None
            return super(BookingView, self).get_context_data(**kwargs)

    def get_initial(self):
        initial = super(BookingView, self).get_initial()
        if 'car' in self.request.GET:
            try:
                initial['book_car'] = Car.objects.get(id=self.request.GET['car'])
            except (Car.DoesNotExist, ValueError):
                pass
                return initial

class CarListView(ListView):
    context_object_name = 'cars'
    model = Car

    def get_queryset(self):
        qs = super(CarListView, self).get_queryset()
        qs = qs.filter(is_available_car=True)
        return qs

Tags: name模型selfformfalsetruegetreturn
1条回答
网友
1楼 · 发布于 2024-04-24 01:22:03

我在@seuling的帮助下找到了解决方案

   class BookingView(FormView):
        template_name = 'buggy_app/booking.html'
        form_class = BookingForm
        models = Booking
        def form_valid(self, form):
          car_id = self.request.GET.get('car', '')
          car = Car.objects.get(id=car_id)
          car.is_available_car = False
          car.save()
          form.save()
          return super(BookingView, self).form_valid(form)
          success_url = reverse_lazy('index')

       def get_context_data(self, **kwargs):
          # kwargs['car'] is the car booking now!
                  try:

                       kwargs['car'] = Car.objects.get(id=self.request.GET.get('car', ''))
                 except (Car.DoesNotExist, ValueError):

                       kwargs['car'] = None
                 return super(BookingView, self).get_context_data(**kwargs)

相关问题 更多 >