2012-03-09 11 views
5

Solo quiero mostrar a los jugadores relacionados con el equipo en un equipo en particular. Normalmente cuando lo hago, me muestra todos mis jugadores de la base de datos. Aquí está mi models.pyformfield_for_foreignkey y Inline Admin

class InningsCard(models.Model): 
    fixture = models.ForeignKey(Fixture) 
    team = models.ForeignKey(Team) 
    runs = models.IntegerField(max_length=6, default=0) 
    wickets = models.IntegerField(max_length=6, default=0) 
    overs = models.FloatField(max_length=6, default=0.0) 

    def __unicode__(self): 
     return str(self.team) 

class BattingDetail(models.Model): 
    STATUS_CHOICES = (
     ('no', 'not out'), 
     ('bowled', 'bowled'), 
     ('caught', 'caught'), 
     ('lbw', 'lbw'), 
    ) 
    innings = models.ForeignKey(InningsCard) 
    player = models.ForeignKey(Player) 
    runs = models.IntegerField(max_length=5, default=0) 
    status = models.CharField(max_length=15, choices=STATUS_CHOICES, default='no') 

    def __unicode__(self): 
     return str(self.player) 

Ahora y aquí está mi admin.py incluir formfield_for_foreignkey, pero no funciona.

class BattingInline(admin.TabularInline): 
    model = BattingDetail 
    extra = 0 

    def formfield_for_foreignkey(self, db_field, request=None, **kwargs): 

     if db_field.name == 'player': 
      kwargs = Player.objects.filter(team = request.team) 
     else: 
      pass 

     return super(BattingInline, self).formfield_for_foreignkey(db_field, request, **kwargs) 


class InningCardAdmin(admin.ModelAdmin): 
    inlines = [BattingInline] 

donde podría estar yendo mal?

// ratón

Respuesta

7
  1. Estás reemplazar toda la kwargs con el conjunto de consultas. kwargs debe haber un diccionario, y la clave particular que está buscando es 'queryset':

    kwargs['queryset'] = Player.objects.filter(team=request.team) 
    
  2. Estoy casi solicitud positivo no va a tener realmente un atributo team. A menos que lo haya agregado usted mismo en algún código que no se muestra aquí, necesita encontrar otra manera de llegar al "equipo" actual. Puede analizar el ID del equipo desde request.path y usarlo para la búsqueda, por ejemplo.

Como nota al margen, la cláusula else no es necesario si sólo vamos a pass allí.