.order_by () não está funcionando como deve / como eu esperava que

votos
1

No meu projeto Django Eu estou usando Product.objects.all().order_by('order')em uma visão, mas não parece estar funcionando corretamente.

Esta é a sua saída:

Nome do produto Ordenar Evolution 2 Polaridade 1 Jumbulaya 3 Kalidascope 4

Deve olhar como este:

Nome do produto Ordenar Polaridade 1 Evolution 2 Jumbulaya 3 Kalidascope 4


Mas isso não acontece. Alguma ideia?

Meu ponto de vista (para que a saída):

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

E a vista responsável por salvar o campo ordem:

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)

E o modelo (sem as partes chatas):

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

Aqui está um exemplo 'ao vivo' da página http://massiveatom.com:8080/debug/ Por favor, note que isso só está sendo executado no servidor dev, por isso não pode ser sempre para cima.

Pedi em #django e eles não parecem saber o que estava acontecendo. Um pensamento foi que o banco de dados / Django estava sendo confundido pelo comando SQL está gerando ( select * from table where 1 order by 'order'), mas eu preferiria não alterar o campo ordem no modelo.

E eu sei que deve haver back-carrapatos ordem no comando SQL acima circundantes, mas a análise coisinha sintaxe meio odiava nele ...

Edit: Cada objeto tem o valor correto, então eu realmente não sei por que ele não está classificando-lo corretamente.

Editar 2: Eu não sei o que estava acontecendo, mas acaba colocando p.save () no circuito fixo tudo ...

Publicado 01/10/2008 em 11:09
fonte usuário
Em outras línguas...                            


1 respostas

votos
5

Seu ciclo poupança é errado. Você economiza Produto para fora do loop. Deveria ser:

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")
Respondeu 01/10/2008 em 11:30
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more