2012-03-09 31 views
5

Chcę pokazać zawodników związanych z drużyną w konkretnym meczu. Zwykle, gdy to robię, pokazuje mi wszystkich moich graczy z bazy danych. Oto mój models.pyFormfield_for_foreignkey i 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) 

Teraz i tutaj jest moje admin.py zawierać formfield_for_foreignkey, ale to nie działa.

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] 

Gdzie mógłbym pójść źle?

// mysz

Odpowiedz

7
  1. Ty zastępując całą kwargs z queryset. kwargs musi być słownikiem, a zwłaszcza klucz szukasz jest „queryset”:

    kwargs['queryset'] = Player.objects.filter(team=request.team) 
    
  2. Jestem prawie pewny, wniosek nie będzie faktycznie mają atrybut team. Jeśli nie dodasz go samemu w jakimś kodzie, nie pokazanym tutaj, musisz znaleźć inny sposób, aby uzyskać dostęp do aktualnego "zespołu". Możesz przetworzyć identyfikator zespołu z request.path i użyć go do wyszukiwania, na przykład.

Na marginesie, klauzula else jest niepotrzebna, jeśli jesteś po prostu będzie pass tam.

Powiązane problemy