首页 > 解决方案 > Django 如何自动获取用户的 ID?

问题描述

我是 django 的新手,如何在提交表单时获取客户模型的 ID。例如

约翰正在提交预订表格,我希望自动获取提交预订的人。意味着在客户注册表格时,链接将发送给客户进行预订。在预订时,我想为预订自动初始化客户。表示 john 预订了汽车,并提供了他想要预订汽车的时间的详细信息。

楷模

class Booking(models.Model):
    class Meta():
        db_table = "booking"
        verbose_name = "Booking"
        verbose_name_plural = "Bookings"
        ordering = ['-booking_date']

    booking_car_car = models.ForeignKey(
        Car,
        on_delete=models.CASCADE,
        related_name='booking_car_car_key'
    )
    booking_customer_customer = models.ForeignKey(
        Customer,
        on_delete=models.CASCADE,
        related_name='booking_customer_customer'
    )
    booking_start_date = models.DateField(
        blank=False,
        null=False
    )
    booking_end_date = models.DateField(
        blank=False,
        null=False
    )
    booking_total_price = models.IntegerField(
        blank=False,
        null=False
    )
    booking_approved = models.NullBooleanField(
        blank=True,
        null=True
    )
    booking_date = models.DateTimeField(
        auto_now_add=True,
        blank=False,
        null=False
    )

    def __str__(self):
        return self.booking_customer_customer.customer_firstname


class Customer(models.Model):
    first_name = models.CharField(max_length=64,null= False)
    last_name = models.CharField(max_length=64)
    customer_age = models.IntegerField(blank=True, null=True)
    last_name = models.CharField(blank=True, max_length=100)
    license_year = models.IntegerField(blank=False, null=False)
    tlc_number = models.IntegerField(blank=False ,null=False)
    contact_num =models.IntegerField(blank=False, null=False)
    contact_email = models.EmailField(blank =False)


    def __str__(self):
        return self.first_name

意见

def rentacar_booking(request):
    if request.POST:
        template = Template.objects.get(template_default__exact=1)
        template_page = template.template_alias + str("/rentacar/rentacar_booking_form.html")
        menu_config_list = MenuItemRentacarList.objects.all()[0]
        menu_config = MenuItemRentacarList.objects.get(id=menu_config_list.id)
        args['main_menu'] = MenuMenu.objects.get(id__exact=template.template_main_menu_id)
        args['menu_items'] = MenuItem.objects.filter(
            menu_item_menu=args['main_menu'],
            menu_item_published=1,
        )
        args['current_menu_item'] = menu_config.menu_item_rentacar_list_menu_item
        all_modules = Module.objects.filter(
            module_show_option__exact='all',
            module_published=1
        )
        selected_modules = Module.objects.filter(
            module_show_option__exact='selected',
            module_published=1,
            module_menu_item=args['current_menu_item']
        )
        excluded_modules = Module.objects.filter(
            module_show_option__exact='except',
            module_published=1,
        ).exclude(
            module_menu_item=args['current_menu_item']
        )
        args['modules'] = list(chain(all_modules, selected_modules, excluded_modules))
        try:
            args['car'] = Car.objects.get(id__exact=request.POST.get('car_id'))
        except:
            args['car'] = None

        if args['car'] is not None:
            return render(request, template_page, args)
        else:
            return HttpResponseRedirect('/rentacar/list/')
    else:
        return HttpResponseRedirect('/')


def rentacar_booking_review(request):
    if request.POST:
        menu_config_list = MenuItemRentacarList.objects.all()[0]
        menu_config = MenuItemRentacarList.objects.get(id=menu_config_list.id)
        template = Template.objects.get(template_default__exact=1)
        template_page = template.template_alias + str("/rentacar/rentacar_booking_review.html")
        args['main_menu'] = MenuMenu.objects.get(id__exact=template.template_main_menu_id)
        args['menu_items'] = MenuItem.objects.filter(
            menu_item_menu=args['main_menu'],
            menu_item_published=1,
        )
        args['current_menu_item'] = menu_config.menu_item_rentacar_list_menu_item
        all_modules = Module.objects.filter(
            module_show_option__exact='all',
            module_published=1
        )
        selected_modules = Module.objects.filter(
            module_show_option__exact='selected',
            module_published=1,
            module_menu_item=args['current_menu_item']
        )
        excluded_modules = Module.objects.filter(
            module_show_option__exact='except',
            module_published=1,
        ).exclude(
            module_menu_item=args['current_menu_item']
        )
        args['modules'] = list(chain(all_modules, selected_modules, excluded_modules))

        book_customer_name = request.POST.get('book_customer_name')
        book_customer_lastname = request.POST.get('book_customer_lastname')
        book_customer_age = request.POST.get('book_customer_age')
        book_customer_idno = request.POST.get('book_customer_idno')
        book_customer_license_expire = request.POST.get('book_customer_license_expire')
        book_customer_phone = request.POST.get('book_customer_phone')
        book_customer_email = request.POST.get('book_customer_email')
        book_booking_start_date = request.POST.get('book_booking_start_date')
        book_booking_end_date = request.POST.get('book_booking_end_date')
        book_booking_car_car = request.POST.get('book_booking_car_car')
        booking_save_form = BookingApprovalForm(request.POST)
#       subject = "Thank you for joining Joinbuggy"
#       from_email = settings.EMAIL_HOST_USER
#       to_email = form.cleaned_data.get('email')
#       join_message = """Your booking is placed we will contact you later """
#       send_mail(subject=subject, from_email=from_email, recipient_list=[to_email], message=join_message,
#                 fail_silently=False)

        date_format = "%Y-%m-%d"
        a = datetime.strptime(book_booking_start_date, date_format)
        b = datetime.strptime(book_booking_end_date, date_format)
        days_delta = b - a

        if days_delta.days >= 1:
            car_price = Car.objects.get(id__exact=book_booking_car_car)
            total_price = int(car_price.car_price) * int(days_delta.days)

            if booking_save_form.is_valid():
                booking_approval = booking_save_form.save(commit=False)
                booking_approval.book_customer_name = book_customer_name
                booking_approval.book_customer_lastname = book_customer_lastname
                booking_approval.book_customer_age = book_customer_age
                booking_approval.book_customer_idno = book_customer_idno
                booking_approval.book_customer_license_expire = book_customer_license_expire
                booking_approval.book_customer_phone = book_customer_phone
                booking_approval.book_customer_email = book_customer_email
                booking_approval.book_booking_start_date = book_booking_start_date
                booking_approval.book_booking_end_date = book_booking_end_date
                booking_approval.book_booking_car_car_id = book_booking_car_car
                booking_approval.book_booking_total_price = total_price
                booking_approval.save()
                args['booking'] = booking_approval
                return render(request, template_page, args)
            else:
                return HttpResponseRedirect('/')
        else:
            return HttpResponseRedirect('/')
    else:
        return HttpResponseRedirect('/')


def rentacar_booking_approve(request):
    args = {}
    if request.POST:
        uuid = request.POST.get('book_unique_id')
        clear_uuid = uuid.replace('-', '')

        template = Template.objects.get(template_default__exact=1)
        template_page = template.template_alias + str("/rentacar/rentacar_booking_success.html")
        menu_config_list = MenuItemRentacarList.objects.all()[0]
        menu_config = MenuItemRentacarList.objects.get(id=menu_config_list.id)
        args['main_menu'] = MenuMenu.objects.get(id__exact=template.template_main_menu_id)
        args['menu_items'] = MenuItem.objects.filter(
            menu_item_menu=args['main_menu'],
            menu_item_published=1,
        )
        args['current_menu_item'] = menu_config.menu_item_rentacar_list_menu_item
        all_modules = Module.objects.filter(
            module_show_option__exact='all',
            module_published=1
        )
        selected_modules = Module.objects.filter(
            module_show_option__exact='selected',
            module_published=1,
            module_menu_item=args['current_menu_item']
        )
        excluded_modules = Module.objects.filter(
            module_show_option__exact='except',
            module_published=1,
        ).exclude(
            module_menu_item=args['current_menu_item']
        )
        args['modules'] = list(chain(all_modules, selected_modules, excluded_modules))

        try:
            prebook = BookingApproval.objects.get(book_unique_id=request.POST.get('book_unique_id'))
        except:
            prebook = None
        if prebook is not None:
            customer_save_form = CustomerForm(request.POST)
            if customer_save_form.is_valid():
                customer = customer_save_form.save(commit=False)
                customer.customer_firstname = prebook.book_customer_name
                customer.customer_lastname = prebook.book_customer_lastname
                customer.customer_age = prebook.book_customer_age
                customer.customer_idno = prebook.book_customer_idno
                customer.customer_license_expire = prebook.book_customer_license_expire
                customer.customer_phone = prebook.book_customer_phone
                customer.customer_email = prebook.book_customer_email
                customer.save()
                try:
                    saved_customer = Customer.objects.get(id=customer.id)
                except:
                    saved_customer = None
                if saved_customer is not None:
                    booking_save_form = BookingForm(request.POST)
                    if booking_save_form.is_valid():
                        booking = booking_save_form.save(commit=False)
                        booking.booking_car_car = prebook.book_booking_car_car  # Complete all fields for Booking model (except approved) and sir for car? ok because its in prebook . and car is foregn key in it . right sir
                        booking.booking_customer_customer = customer  # taking customer that we saved all his details, sure it's a foreign key!
                        booking.booking_start_date = prebook.book_booking_start_date
                        booking.booking_end_date = prebook.book_booking_end_date
                        booking.booking_total_price = prebook.book_booking_total_price
                        booking.save()
                        try:
                            booking = Booking.objects.get(id=booking.id)
                        except:
                            booking = None
                        if booking is not None:
                            args['car'] = car = Car.objects.get(id=prebook.book_booking_car_car.id)
                            car.car_available = 0
                            car.save()
                            prebook.delete()
                            return render(request, template_page, args)  # Template which says that booking successful
                        else:
                            return HttpResponseRedirect('/')  # Thd response page, that says that form is incorrect
                    else:
                        return HttpResponseRedirect('/')  # Thd response page, that says that form is incorrect
                else:
                    return HttpResponseRedirect('/')  # Thd response page, that says that form is incorrect
            else:
                return HttpResponseRedirect('/')  # Thd response page, that says that form is incorrect
        else:
            return HttpResponseRedirect('/')  # Thd response page, that says that form is incorrect
    else:
        return HttpResponseRedirect('/')

任何人都可以帮我提供代码,因为我没有让客户预订。所有客户都显示在其中,我不想要那个下拉列表我想要自动选择

标签: djangodjango-formsdjango-views

解决方案


推荐阅读