.order_by() لا يعمل ما ينبغي أن / كيف تتوقع أن

StackOverflow https://stackoverflow.com/questions/156951

  •  03-07-2019
  •  | 
  •  

سؤال

في مشروع جانغو أنا باستخدام Product.objects.all().order_by('order') في إطلالة, ولكن لا يبدو أن تعمل بشكل صحيح.

هذا هو الناتج:

اسم المنتج نوع تطور 2 قطبية 1 Jumbulaya 3 Kalidascope 4

ينبغي أن تبدو مثل هذا:

اسم المنتج نوع قطبية 1 تطور 2 Jumbulaya 3 Kalidascope 4


لكنه لا.أي أفكار ؟

من وجهة نظري (هذا الناتج):

def debug(request):
    order = Product.objects.all().order_by('order')
    return render_to_response('cms/debug.html', {'order' : order, 'name' : name})

وعرض المسؤول عن حفظ النظام الميدانية:

def manage_all(request):

if request.method == 'POST':
    PostEntries = len(request.POST)
    x = 1       
    while x < PostEntries:
        p = Product.objects.get(pk=x)
        p.order = int(request.POST.get(str(x),''))
        print "Itr: " + str(x)
        x = x + 1
    p.save()
    print "Product Order saved"     
    return HttpResponse("Saved")

نموذج (دون بت مملة):

class Product(models.Model):
    name = models.CharField(max_length=100)
    order = models.IntegerField(blank = True, null = True

هنا هو 'يعيش' على سبيل المثال الصفحة http://massiveatom.com:8080/debug/ يرجى ملاحظة أن هذا هو فقط يعمل على ديف الخادم, لذلك قد لا يكون دائما ما يصل.

لقد طلبت في #جانغو و لم تعرف ما كان يحدث.كان احد يعتقد أن قاعدة البيانات/جانغو كان يجري في حيرة من أمر SQL هو توليد (select * from table where 1 order by 'order'), ولكن يفضل عدم تغيير ترتيب الحقل في النموذج.

وأنا أعلم يجب أن يكون هناك مرة أخرى-القراد المحيطة بها النظام في أعلاه أمر SQL, ولكن الجملة إعراب الشيء نوعا ما يكره على ذلك...

تحرير: كل كائن له القيمة الصحيحة, لذلك أنا لا أعرف حقا لماذا لا يصنف ذلك بشكل صحيح.

تحرير 2: أنا لا أعرف ما كان يحدث ، ولكن اتضح وضع p.حفظ() في حلقة ثابتة كل شيء...

هل كانت مفيدة؟

المحلول

الادخار الخاص بك الحلقة هو الخطأ.يمكنك حفظ المنتج خارج الحلقة.ينبغي أن يكون:

if request.method == 'POST':
    PostEntries = len(request.POST)
    x = 1           
    while x < PostEntries:
            p = Product.objects.get(pk=x)
            p.order = int(request.POST.get(str(x),''))
            print "Itr: " + str(x)
            x = x + 1
            p.save() # NOTE HERE <- saving in loop instead of outside
    print "Product Order saved"             
    return HttpResponse("Saved")
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top