2012-03-09 12 views
5

Voglio mostrare solo i giocatori relativi alla squadra in un determinato appuntamento. Normalmente quando lo faccio, mi mostra tutti i miei giocatori dal database. Qui è la mia models.pyformfield_for_foreignkey e 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) 

ora e qui è la mia admin.py includere formfield_for_foreignkey, ma non funziona.

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] 

dove potrei sbagliare?

// il mouse

risposta

7
  1. si sta sostituendo l'intero kwargs con il set di query. kwargs deve essere un dizionario, e la chiave particolare che stai cercando è 'queryset':

    kwargs['queryset'] = Player.objects.filter(team=request.team) 
    
  2. Ho quasi richiesta positivo non sta per avere in realtà un attributo team. A meno che tu non l'abbia aggiunto tu stesso in qualche codice non visualizzato qui, devi trovare un altro modo per arrivare alla "squadra" attuale. È possibile analizzare l'ID del team da request.path e utilizzarlo, ad esempio, per la ricerca.

Come nota a margine, la clausola else non è necessaria se si sta solo andando a pass lì.

Problemi correlati