Hola tengo un formulario con un campo de búsqueda con autocompletado, me devuelve la identificación de un vendedor, pero necesito que me devuelva la identificación del vendedor, el nombre y apellido.

Mis modelos:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
class Usuario(models.Model):
    user = models.OneToOneField(User)
    rut=models.CharField(max_length=15, unique=True) 
    nombre=models.CharField(max_length=30)
    apellido_paterno=models.CharField(max_length=30)
    apellido_materno=models.CharField(max_length=30)

    def __unicode__ (self):
        return '%s %s %s' % (self.nombre, self.apellido_paterno, self.apellido_materno)

class Vendedor(Usuario):
    local=models.ForeignKey(Local)

    class Meta:
        ordering = ['rut', 'apellido_paterno', 'apellido_materno']

Mi Vista:

1
2
3
4
5
@login_required
def buscar_vendedor(request):
    term = request.GET.get('term', '')
    resultado = list(Vendedor.objects.filter(rut__icontains=term, user__is_active=True).values_list('rut', flat=False))
    return HttpResponse(simplejson.dumps(resultado), mimetype='application/json')

La vista anterior me funciona bien pero no se como agregar las fields adicionales que necesito.

Intente usando otro metodo:

1
2
3
4
5
@login_required
def buscar_vendedor(request):
    term = request.GET.get('term', '')
    resultado = serializers.serialize('json', Vendedor.objects.all(), fields=('rut','nombre'))
    return HttpResponse(resultado, mimetype='application/json')

Pero no me devuelve el contenido de las fields, pero me devuelve esto:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
[
    {
        "pk": 3, 
        "model": "Vendedores.vendedor", 
        "fields": {}
    }, 
    {
        "pk": 4, 
        "model": "Vendedores.vendedor", 
        "fields": {}
    }
]

Espero me puedan ayudar con este problema, saludos.

preguntado 19 Abr '12, 17:24

MalaLeche's gravatar image

MalaLeche
415273238
Aceptadas: 36%

editó 19 Abr '12, 17:25


Tu problema se debe a que tus modelos usan herencia, y por tanto debes serializar tanto la clase hija como la padre, como se explica en la documentación de Django sobre serialización de modelos.

En tu caso podrías intentar usar select_related y construir luego una lista y serializarla, algo como esto:

1
2
3
4
5
6
7
@login_required
def buscar_vendedor(request):
    term = request.GET.get('term', '')
    vendedores = list(Vendedor.objects.filter(rut__icontains=term, user__is_active=True)\
                                      .select_related('usuario')\
                                      .values('rut', 'nombre', 'apellido_materno', 'apellido_paterno'))
    return HttpResponse(simplejson.dumps(vendedores), mimetype='application/json')

No he probado este código, pero creo que debería funcionar sin demasiados cambios.

enlace permanente

respondido 19 Abr '12, 23:44

haplo's gravatar image

haplo
4.8k24566
Aceptadas: 72%

editó 20 Abr '12, 11:32

Hola, gracias por tu respuesta pero me da error el error "global name 'v' is not defined" y en los .values no reconoce usuario__nombre.

(20 Abr '12, 01:17) MalaLeche

He corregido mi respuesta, no lo he probado pero por la documentación de Django sobre herencia de modelos creo que debería funcionar hacer values('nombre', ...). Y el select_related() puede no hacer falta.

(20 Abr '12, 11:34) haplo

Muchas gracias @haplo funciona muy bien.

(20 Abr '12, 15:42) MalaLeche

Me alegro de que te funcione.

(20 Abr '12, 15:52) haplo

Hola, estoy comenzando a usar django 1.4 con un pequeño proyecto, quisiera agregar una funcionalidad de búsqueda con autocompletado, he revisado varios widgets y no he logrado entenderlos. Veo que en su comentario dice que tiene un autocompletado funcionando, serían tan amables de darme un ejemplo paso a paso de como hacerlo, quiero aprender. Muchas gracias de antemano por su ayuda.

(10 Nov '12, 05:48) Serena
Tu respuesta
Activar/desactivar vista previa

Seguir esta pregunta

Por Email:

Una vez que entres podrás suscribirte desde aquí para recibir actualizaciones

Por RSS:

Respuestas

Respuestas y Comentarios

Trucos del editor

  • *italic* or __italic__
  • **negrita** o __negrita__
  • enlace:
    [texto](http://url.com/ "Pregunta")
  • imagen:
    ![alt texto](/path/img.jpg "Pregunta")
  • lista numerada:
    1. Foo
    2. Bar
  • Código:
    • Dentro de un parrafo:
      `codigo`
    • Fragmento de código:
      Selecciona el texto y usa el botón del icono de ceros y unos
  • Resaltado de sintaxis:
    Hay dos maneras de hacerlo:
    • La 1ª línea es un Shebang #!/usr/bin/env python
    • La 1ª línea es un lexer
      :::python

      Algunos lexer validos:
      :::python
      :::django
      :::css+django
      :::html+django
      :::console
      :::pycon
  • Para añadir un salto de línea simplemente deja una línea en blanco entre parrafos
  • se permite código HTML básico

Etiquetas de la pregunta:

×174
×4
×3

pregunta realizada: 19 Abr '12, 17:24

pregunta vista: 468 veces

última modificación: 10 Nov '12, 07:54