西服表单选项卡在DjangoAdmin中不起作用

2024-04-20 07:18:39 发布

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

我正在使用django套装创建我的网站的管理员。我想在一个表单中创建不同的选项卡,因为我正在使用suit_form_tabs属性,我在我的管理中添加了它,但它不工作,也不显示在管理表单中

    change_form_template = 'admin/view_order.html'
    def customer_username(self, obj):
        return format_html(f'''<a href="/admin/signin/customer/{obj.username.id}/change/">{obj.username.username}</a>''')
    
    
    def generate_invoice(self, obj, request):
        print("Generating invoice......")
        return messages.info(request,message="generate invoice")

    def view_order(self, obj):
        return f"Order No #{obj.id}"
    list_display = ['view_order', 'customer_username', 'full_name', 'email','shipping_mobile_number', 'created_at', 'order_status']
    suit_form_tabs  = (('info', 'Info'), ('address', 'Address'),('products', 'Products'),('tracking','Tracking'))
    @csrf_protect_m
    def changeform_view(self, request, object_id=None, form_url='', extra_context=None):
        if not object_id:
            self.form = OrderForms2
            self.inlines = [orderProduct,OrderTrackingAdminTabular]
            self.fieldsets = [
            ('Info', {
                'classes': ('suit-tab', 'suit-tab-info',),
                'fields': ['full_name']
            }),
            ('Address', {
                'classes': ('suit-tab', 'suit-tab-address',),
                'fields': []}),
            ('Products', {
                'classes': ('suit-tab', 'suit-tab-products',),
                'fields': []})]
            self.suit_form_tabs  = (('info', 'Info'), ('address', 'Address'),('products', 'Products'),('tracking','Tracking'))
            extra_context = {}
            extra_context.update({
            'show_save': True,
            'show_save_and_continue': True,
            'show_save_and_add_another': False,
            'show_delete': False,
            'Add_Order': True,})
            return admin.ModelAdmin.changeform_view(
            self, request,
            object_id=object_id,
            form_url=form_url,
            extra_context=extra_context)
        
        obj = self.get_object(request, unquote(object_id))
        if request.method == 'POST' and 'generate_invoice' in request.POST:
            self.generate_invoice(obj, request)
            return redirect(f'/api/v1/order/generate_invoice/{obj.id}/')
        self.form = OrderForms
        self.inlines = []
        if request.method == 'POST' and 'save_delivery_partner' in request.POST:
            if not len(request.POST['delivery_partner']):
                del_partner = None
            else:
                del_partner = request.POST['delivery_partner']
            obj.delivery_partner = del_partner
            obj.save()
            return HttpResponseRedirect(request.get_full_path())
        
        if request.method == 'POST' and 'send_order_details_to_dehlivery' in request.POST:
            res = dehlivery.create_order(obj)
            try:
                if res.status_code == 200:
                    messages.info(request,message=f"Order Deatils sent to Dehlivery: {res.json()}")
                else:
                    messages.error(request,message = f"Error in dehlivery API{res.json()}")
            except Exception as e:
                messages.error(request,message = f"{e} Error in dehlivery calling function: {res}")
            return HttpResponseRedirect(request.get_full_path())
        
        if request.method == 'POST' and 'track_order' in request.POST:
            if obj.delivery_partner == 'other':
                return redirect(f'/admin/order/ordertracking/?orderid={obj.id}')
            res = dehlivery.track_order(obj)
            scan_list = res['ShipmentData'][0]['Shipment']['Scans']
            orderObj = Order.objects.get(id = obj.id)
            delete_all = OrderTracking.objects.filter(orderid = orderObj).exclude(status = "Manifested").delete()
            for scan in scan_list:
                if  scan['ScanDetail']['Scan'] == "Manifested":
                    status = "Order Sent to Dehlivery"
                else:
                    status = scan['ScanDetail']['Scan']
                OrderTracking.objects.create(orderid = orderObj,status = status,comments = scan['ScanDetail']['Instructions'],location = scan['ScanDetail']['ScannedLocation'],date_added= scan['ScanDetail']['ScanDateTime'],notify_customers = False)
            newtrack = OrderTracking.objects.all().latest('date_added')
            orderObj.order_status = newtrack.status
            orderObj.save()
            return redirect(f'/admin/order/ordertracking/?orderid={obj.id}')

        if request.method == 'GET':
            fields = ['product_name', 'quantity','price', 'tax_type', 'tax_rate', 'selling_price_with_tax', 'total_product_cost']
            Order_Products = OrderProducts.objects.filter(order=obj.id).values_list('product_name', 'quantity', 'price',  'tax_type', 'tax_rate', 'selling_price_with_tax', 'total_product_cost')
            res = []
            for product in Order_Products:
                data = {fields[i]: product[i] for i in range(len(fields))}
                res.append(data)
            extra_context = {
                'show_save': False,
                'show_save_and_continue': False,
                'show_save_and_add_another': False,
                'show_delete': False,
                "res": res,
                "fields": ['Product Name', 'Quantity', 'Price',  'Tax Type', 'Tax Rate', 'Selling Price', "Total Product Cost"],
                "orderobj": obj,
                "CodAmount": obj.cod_charges + (obj.cod_charges * (obj.cod_tax_rate/100)),
                "ShippingAmount": (obj.shipping_charges) * (obj.shipping_tax_rate/100),
            }
        return admin.ModelAdmin.changeform_view(
            self, request,
            object_id=object_id,
            form_url=form_url,
            extra_context=extra_context,
        )

管理表单的图像Image of the admin form

如图所示,“图像字段集”属性工作正常,但“套装表单”选项卡不工作