Ver Mensaje Individual
  #1 (permalink)  
Antiguo 28/06/2012, 08:28
ioscar
 
Fecha de Ingreso: diciembre-2011
Ubicación: Cancun
Mensajes: 47
Antigüedad: 12 años, 10 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