В моем проекте Django я использую Product.objects.all().order_by('order') в представлении, но, похоже, он не работает должным образом.
Это результат:
Product Name Sort Evolution 2 Polarity 1 Jumbulaya 3 Kalidascope 4Должно получиться так:
Product Name Sort Polarity 1 Evolution 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/. Обратите внимание, что она работает только на сервере разработки, поэтому не всегда работает.
Я спросил в #django, и они, похоже, не знали, что происходит. Одна мысль заключалась в том, что база данных / Django была сбита с толку генерируемой ею командой SQL (select * from table where 1 order by 'order'), но я бы предпочел не изменять поле порядка в модели.
И я знаю, что в приведенной выше команде SQL должны быть обратные тики, но синтаксический синтаксический анализ этого типа ненавидел ...
Редактировать: Каждый объект имеет правильное значение, поэтому я действительно не знаю, почему он не сортирует его должным образом.
Изменить 2: Я не знаю, что происходит, но оказалось, что вставка p.save () в цикл все исправила ...
Попробуйте запустить запрос, затем попробуйте запустить тот же набор запросов в оболочке django и посмотрите результаты.
@joshhunt: когда сохранение было вне цикла, был сохранен только последний объект Product (с наибольшим pk). Если вы измените поле объекта Django, но забудете его сохранить, изменения будут потеряны.






Ваш цикл сохранения неправильный. Вы сохраняете Продукт вне цикла. Должен быть:
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")
Когда вы сами заглядываете в базу данных, порядок правильный?