Pegar Ultima ID

瀏覽次數:447 次
跳到第一則未讀訊息

Oraculum

未讀,
2009年5月11日 凌晨2:56:482009/5/11
收件者:Django Brasil
Olá pessoal num formulario que fiz no django preciso de pegar a ultima
id inserida no banco para que o usuário possa logo em seguida editar o
registro que acabou de inserir, então eu criei uma class no meu model
assim:

class ClienteManager(models.Manager):
def UltimaID(self):
from django.db import connection
cursor = connection.cursor()
cursor.execute("""
SELECT Max(id) AS UltimoID
FROM cliente_cliente
""")
for row in cursor.fetchall():
u = row[0]
return u


Acontece que pesquisando um pouco na lista eu achei um exemplo de duas
linhas:

# Pega uma lista em ordem decrescente de chave primária, limitando a
um registro
lista = Noticia.objects.order_by('-pk')[:1]
# Se houver algum elemento na lista, pega o primeiro, senão usa None
noticia = lista and lista[0] or None

Só que tento fazer como no exemplo e ele não retorna nada veja como
estou fazendo na minha view:

lista = Cliente.objects.order_by('-id')[:1]
id = lista and lista[0] or None

Alguém sabe me dizer o que estou fazendo de errado?


Desde já agradeço a todos que postarem

Túlio Paiva

未讀,
2009年5月11日 清晨6:17:072009/5/11
收件者:django...@googlegroups.com
Olá!

2009/5/11 Oraculum <damon....@gmail.com>:
Você tentou executar este trecho de código no shell? Que resultados
obteve? Além disso, provavelmente a função "latest"
(http://docs.djangoproject.com/en/dev/ref/models/querysets/#latest-field-name-none)
é uma forma melhor de se fazer isso.
>
> Alguém sabe me dizer o que estou fazendo de errado?
>
>
> Desde já agradeço a todos que postarem
[]'s
> >
>



--
Túlio de Paiva
paiva...@gmail.com

Vinicius Mendes

未讀,
2009年5月11日 清晨6:57:572009/5/11
收件者:django...@googlegroups.com
E por que você precisa obter isso do banco?

Se você salvar a instância, e fizer instancia.pk, vai retornar o id da instancia que você salvou. Se você salvar um form:

instancia = form.save()
instancia.pk

Vai retornar o id da instancia que você salvou.

Acho que o que você tá querendo é dificultar as coisas... É mesmo obter esse último id do banco? Será que num dá pra obter ele pelo próprio django?

def adicionar(request):
    if request.method == POST:
        form = MeuForm(request.POST)
        if form.is_valid():
            instance = form.save()
            return HttpResponseRedirect(reverse('minha view de editar'), kwargs={'pk': instance.pk})
    else:
        form = MeuForm()
    return direct_to_template(request, 'template_de_adicionar.html', extra_context={'form': form})

2009/5/11 Túlio Paiva <paiva...@gmail.com>

André Gadonski

未讀,
2009年5月11日 上午11:48:012009/5/11
收件者:django...@googlegroups.com


2009/5/11 Oraculum <damon....@gmail.com>


Olá pessoal num formulario que fiz no django preciso de pegar a ultima
id inserida no banco 


Precisei disso essa semana, 

Cliente.objects.reverse()[:1]


Vai retornar o ultimo item inserido.

 
--
----------------------------
+ André Gadonski.
+ Developer
+ http://blog.redel.com.br/andre
+ http://www.redel.com.br

Danilo Faustinoni Cabello

未讀,
2009年5月11日 上午11:54:042009/5/11
收件者:django...@googlegroups.com
2009/5/11 André Gadonski <andre.g...@gmail.com>:

> Precisei disso essa semana,
> Cliente.objects.reverse()[:1]
>
> Vai retornar o ultimo item inserido.

Você quer o último id inserido ou o id do que você acabou de inserir?
Dependendo da situação podem ser duas coisas diferentes, se for o que
você acabou de inserir utilize a recomendação do Vinicius.

Vinicius Mendes

未讀,
2009年5月11日 下午1:08:062009/5/11
收件者:django...@googlegroups.com
O último ID inserido nem sempre é o ID do registro que você acabou de inserir. Em bancos com muitos acessos, no espaço de tempo entre o cadastro e a obtenção do último ID, pode acontecer uma nova inserção.

2009/5/11 Danilo Faustinoni Cabello <danilo....@gmail.com>

Oraculum

未讀,
2009年5月12日 凌晨1:28:242009/5/12
收件者:Django Brasil
Ops valew Vinicius pela dica era isso mesmo que eu precisava pegar a
id do registro que tinha terminado de inserir.

Da forma que você colocou fica melhor ainda :)

On 11 maio, 07:57, Vinicius Mendes <vbmen...@gmail.com> wrote:
> E por que você precisa obter isso do banco?
>
> Se você salvar a instância, e fizer instancia.pk, vai retornar o id da
> instancia que você salvou. Se você salvar um form:
>
> instancia = form.save()
> instancia.pk
>
> Vai retornar o id da instancia que você salvou.
>
> Acho que o que você tá querendo é dificultar as coisas... É mesmo obter esse
> último id do banco? Será que num dá pra obter ele pelo próprio django?
>
> def adicionar(request):
>     if request.method == POST:
>         form = MeuForm(request.POST)
>         if form.is_valid():
>             instance = form.save()
>             return HttpResponseRedirect(reverse('minha view de editar'),
> kwargs={'pk': instance.pk})
>     else:
>         form = MeuForm()
>     return direct_to_template(request, 'template_de_adicionar.html',
> extra_context={'form': form})
>
> 2009/5/11 Túlio Paiva <paivatu...@gmail.com>
>
>
>
>
>
> > Olá!
>
> > 2009/5/11 Oraculum <damon.abd...@gmail.com>:
> >http://docs.djangoproject.com/en/dev/ref/models/querysets/#latest-fie...
> > )
> > é uma forma melhor de se fazer isso.
>
> > > Alguém sabe me dizer o que estou fazendo de errado?
>
> > > Desde já agradeço a todos que postarem
> > []'s
>
> > --
> > Túlio de Paiva
> > paivatu...@gmail.com
回覆所有人
回覆作者
轉寄
0 則新訊息