اذهب إلى المحتوى

السؤال

نشر

مرحبا

احاول حساب المسافةبالكيلومتر بين بوستل كود الزبون والبائع في حالة اذا اراد خدمة التوصيل

وضرب النتيجة بسعر التوصيل 

class Delivary(models.Model):
    ....
    price=models.PositiveIntegerField( verbose_name=_("Price for 1KM:"),blank=True, null=True,)

class Payment(models.Model):
     ....
     post_code = models.CharField(max_length=10, )
     Delivery_Service=models.BooleanField(_("Delivery_Service?"),default=False,null=True)

class Order(models.Model):
     ....
     delivery_costs = models.CharField( default=0, max_length=50,  blank=True, null=True)

قمت بمعالجته ضمن الفيو على الشكل التالي:

def payment(request):
    if Payment.Delivery_Service == True:
            dist=GeoDistance("in")
            cal_distance=dist.query_postal_code(Payment.post_code,product_detail.product_vendor.post_code)
            Order.delivery_costs=cal_distance*Delivary.price
            # print(delivery_costs,"km")
            #  {{Profile.post_code}}
    
    else:
            Order.delivery_costs==0     

العرض:

               {%if order.delivery_costs%}
                                <tr>
                                    <td class="image product-thumbnail"></td>
                                    <td>
                                        <h6 class="w-160 mb-5"><a  class="text-heading">Delivary Service</a></h6></span>
                                       
                                    </td>
                                   
                                    <td>
                                        <h4 class="text-brand">+{{request.session.currency}}{{order.delivery_costs|floatformat:"2"|currency:request.session.currency}}</h4>
                                    </td>
                                </tr>
                                {%endif%}

لكن لم تظهر النتيجة ماالخطأ؟؟ 

Recommended Posts

  • 0
نشر

أرجو منك التحقق من النقاط التالية:

1- في الكلاس Payment، يجب تعيين خاصية Delivery_Service على نموذج Payment بدلاً من تعيينها على نسخة Payment.

2- في دالة payment، يجب استخدام نسخة Payment.objects.filter(...) لاسترداد طلب الدفع الذي يتم عملية الدفع له، ولا يمكن الوصول إلى الخاصية Delivery_Service مباشرة من النموذج Payment.

3- في خط Order.delivery_costs==0 ، يجب استخدام عامل الإسناد ( = ) بدلاً من عامل المساواة المزدوج ( == ).

4- يجب حفظ الطلب المحدث بعد تعيين تكلفة التوصيل.

بناءً على ما سبق، يمكن تحديث الكود على النحو التالي:

def payment(request):
    if Payment.objects.filter(id=<payment_id>, Delivery_Service=True).exists():
        payment = Payment.objects.get(id=<payment_id>)
        dist = GeoDistance("in")
        cal_distance = dist.query_postal_code(payment.post_code, product_detail.product_vendor.post_code)
        delivery_costs = cal_distance * Delivary.objects.first().price
        Order.objects.filter(payment=payment).update(delivery_costs=delivery_costs)
    
    else:
        Order.objects.filter(payment=payment).update(delivery_costs=0)

ويجب استبدال <payment_id> بمعرف الدفع الذي يتم عملية الدفع له.

وأخيرًا، في العرض، يجب التحقق من وجود قيمة لتكلفة التوصيل قبل عرضها، لذلك يمكن استبدال

{%if order.delivery_costs%}

بـ {% if order.delivery_costs is not None and order.delivery_costs != '' %}.

بعد ذلك يمكنك التحقق من النتيجة وأخبريني إذا ظهرت مشاكل أخرى.

  • 0
نشر
بتاريخ 43 دقائق مضت قال Mustafa Suleiman:

 

ويجب استبدال <payment_id> بمعرف الدفع الذي يتم عملية الدفع له.

 

قمت باستبدالها على الشكل التالي:

  if Payment.objects.filter(id=payment.id, Delivery_Service=True).exists():

وواجهت الخطأ التالي في المتصفح:

علما ان استخدام payment صحيحة

Annotation 2023-03-29 123258.jpg

  • 0
نشر

هناك مشكلة في استخدام متغير "payment" في الدالة "payment" بدون تعريفها أولاً، لذلك يجب تعريف "payment" باستخدام "Payment.objects.get(...)" قبل استخدامها في الكود. يمكن استخدام الكود التالي لتجاوز هذه المشكلة:

def payment(request):
    payment_id = <payment_id>
    try:
        payment = Payment.objects.get(id=payment_id)
    except Payment.DoesNotExist:
        # إذا كان هناك خطأ في الدفع، يجب القيام بالإجراء المناسب هنا
        return HttpResponse("Payment does not exist")
        
    if payment.Delivery_Service:
        dist = GeoDistance("in")
        cal_distance = dist.query_postal_code(payment.post_code, product_detail.product_vendor.post_code)
        delivery_costs = cal_distance * Delivary.objects.first().price
        Order.objects.filter(payment=payment).update(delivery_costs=delivery_costs)
    else:
        Order.objects.filter(payment=payment).update(delivery_costs=0)
    
    context = {
        # تحديد context بشكل مناسب هنا
    }
    return render(request, "payment.html", context)

وأرجو منك التحقق من النقاط التالية:

1- في تكلفة التوصيل، يجب استخدام نوع الحقل الصحيح لتخزين قيمة التكلفة (بدلاً من CharField):

delivery_costs = models.DecimalField(default=0, max_digits=10, decimal_places=2, blank=True, null=True)

2- أيضًا  استخدام القيم الحقيقية للأشياء المطلوبة بدلاً من النماذج. على سبيل المثال، يجب استخدام request.POST.get('post_code') بدلاً من Payment.post_code.

3-  استخدام مؤشر على كائن Delivary بدلاً من استخدام اسم النموذج، مثل:

delivery_price = Delivary.objects.get().price

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...