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

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

Zeina Almakdisi

السؤال

مرحبا

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

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

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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...