Foros del Web » Programando para Internet » Python »

Problema con formfield_for_foreignkey

Estas en el tema de Problema con formfield_for_foreignkey en el foro de Python en Foros del Web. Tengo una duda muy parecida respecto a este tema , pero no he podido resolver mi problema , tengo 3 modelos : Código: class Serie(models.Model): ...
  #1 (permalink)  
Antiguo 28/06/2012, 08:28
 
Fecha de Ingreso: diciembre-2011
Ubicación: Cancun
Mensajes: 47
Antigüedad: 12 años, 3 meses
Puntos: 1
Pregunta Problema con formfield_for_foreignkey

Tengo una duda muy parecida respecto a este tema , pero no he podido resolver mi problema , tengo 3 modelos :

Código:
class Serie(models.Model):
nombre=models.CharField("Nombre de la Serie",max_length=100,unique=True)
#Otros campos
def __str__(self):
    return self.nombre

class Temporada(models.Model):
serie=models.ForeignKey(Serie, verbose_name="Selecciona Una Serie")
nombre=models.CharField("Nombre de la Temporada",max_length=100)
#Otros campos
def __str__(self):
    return self.nombre

class Capitulo_Serie(models.Model):
serie=models.ForeignKey(Serie, verbose_name="Selecciona Una Serie")
temporada=models.ForeignKey(Temporada, verbose_name="Nombre Temporada")
nombre=models.CharField("Capitulo",max_length=100)
#Otros campos
def __str__(self):
    return self.nombre
En el Admin.py
Código:
class temporada_inline(admin.TabularInline):
  model=models.Temporada
  extra=1
class capitulo_inline(admin.TabularInline):
  model=models.Capitulo_Serie    
  extra=1
  def formfield_for_foreignkey(self, db_field, request, **kwargs):
    if db_field.name == 'temporada':
        kwargs["queryset"] = models.Temporada.objects.filter(serie=request.user)
    return super(capitulo_inline, self).formfield_for_foreignkey(db_field, request, **kwargs)

class temporada_admin(admin.ModelAdmin):
	inlines=[
		temporada_inline,
		capitulo_inline,
	]

admin.site.register(models.Serie,temporada_admin)
Lo que necesito es que filtre en capitulo_serie solo las temporadas correspondientes a la serie que tengo abierta en ese momento , por ejemplo tengo esto:

serie1
  • temporada1-serie1
  • temporada2-serie1
  • temporada3-serie1
serie2
  • temporada1-serie2
  • temporada2-serie2
  • temporada3-serie2

y voy a modificar en el admin a serie1 , en el select temporada (que es un foreingkey a el model Temporada) de capitulo_serie , que me cargue solamente las temporadas de serie1 , lo intente hacer de esta manera:
Código:
def formfield_for_foreignkey(self, db_field, request, **kwargs):
    if db_field.name == 'temporada':
        kwargs["queryset"] = models.Temporada.objects.filter(serie=request.user)
    return super(capitulo_inline, self).formfield_for_foreignkey(db_field, request, **kwargs)
pero me carga siempre las temporadas de Serie1 , asi me valla a modificara serie2 me carga las temporadas de serie1 :

probe cambiando el valor de esta linea por
Código:
kwargs["queryset"] = models.Temporada.objects.filter(serie=2)#el id de la serie
Funciona pero la idea no es poner el id manualmente , sino que identifique que serie tengo abierta y tome ese id.
La verdad no exactamente k deberia de colocar para que me filtre las temporadas dependiendo de la serie , ya he visto temas similares pero aun no le he podido resolver
  #2 (permalink)  
Antiguo 29/06/2012, 07:55
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con formfield_for_foreignkey

Creo que falta ver qué tiene el objeto request, y cómo es la definición de tus URLs, además de qué URLs estás probando
  #3 (permalink)  
Antiguo 29/06/2012, 08:26
 
Fecha de Ingreso: diciembre-2011
Ubicación: Cancun
Mensajes: 47
Antigüedad: 12 años, 3 meses
Puntos: 1
Respuesta: Problema con formfield_for_foreignkey

Mira todo lo estoy haciendo dentro del admin , y la url que me arroja cuando abro una serie es esta :

http://127.0.0.1:8000/admin/control/serie/#id/

Con respecto a request no tengo muy claro lo que me indicas , me estoy basando de aqui que es un tema parecido al mio
  #4 (permalink)  
Antiguo 29/06/2012, 17:25
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con formfield_for_foreignkey

Lo que decía del objeto request es porque veo que estás usando request.user en .filter(), y quería saber por qué, ¿no deberías estar usando request.id?
  #5 (permalink)  
Antiguo 30/06/2012, 06:50
 
Fecha de Ingreso: diciembre-2011
Ubicación: Cancun
Mensajes: 47
Antigüedad: 12 años, 3 meses
Puntos: 1
Respuesta: Problema con formfield_for_foreignkey

Hice lo que me dijiste pero mando este error :

'WSGIRequest' object has no attribute 'id'

Lo coloque de esta manera
Código:
kwargs["queryset"] = models.Temporada.objects.filter(serie=request.id)
Intente con esto :
Código:
kwargs["queryset"] = models.Temporada.objects.filter(serie=Serie)
Pero no me mostro ningun dato en el select , donde Serie es el modelo
  #6 (permalink)  
Antiguo 01/07/2012, 14:16
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con formfield_for_foreignkey

request.POST['id'] o request.GET['id'], quizás?
  #7 (permalink)  
Antiguo 02/07/2012, 08:17
 
Fecha de Ingreso: diciembre-2011
Ubicación: Cancun
Mensajes: 47
Antigüedad: 12 años, 3 meses
Puntos: 1
Exclamación Respuesta: Problema con formfield_for_foreignkey

Realice lo que me dices con post y get pero me manda esto :
Código:
"Key 'id' not found in <QueryDict: {}>"
Intente con esto request.POST['serie'] y el mismo error

No se como obtener el id por ejemplo de la serie 1,2,3,... si tengo esta url

http://127.0.0.1:8000/admin/control/serie/3/

Este es el valor como pasarselo para que me filre las temporadas de esa serie
  #8 (permalink)  
Antiguo 04/07/2012, 11:06
 
Fecha de Ingreso: diciembre-2011
Ubicación: Cancun
Mensajes: 47
Antigüedad: 12 años, 3 meses
Puntos: 1
Información Respuesta: Problema con formfield_for_foreignkey

@AlvaroG gracias por tu ayuda , pero al final lo resolvi obteniendo la url actual lo converti a una lista y luego obtuve el id

url actual http://127.0.0.1:8000/admin/control/serie/1/

Código:
class capitulo_inline(admin.TabularInline):
model=models.Capitulo_Serie  
#raw_id_fields=('temporada',) 
extra=1

def formfield_for_foreignkey(self, db_field, request, **kwargs):
    if db_field.name == 'temporada':
        urlactual=request.get_full_path()
        urlactual=urlactual.split('/')
        _idserie=int(urlactual[4])
        kwargs["queryset"] = models.Temporada.objects.filter(serie=_idserie)
    return super(capitulo_inline, self).formfield_for_foreignkey(db_field, request, **kwargs)
Asi funciona de maravilla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:37.