.order_by() لا يعمل ما ينبغي أن / كيف تتوقع أن
سؤال
في مشروع جانغو أنا باستخدام 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")