2012-03-09 130 views
5

我只想在特定夹具中显示与团队相关的球员。通常当我这样做时,它会向我展示数据库中的所有玩家。这里是我的models.pyformfield_for_foreignkey和内联管理员

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) 

现在,这里是我的admin.py包括formfield_for_foreignkey,但它不工作。

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] 

哪里可能会出错?

//鼠标

回答

7
  1. 你与查询集替换整个kwargskwargs必须是一本字典,你要寻找的特定的键“查询集”:

    kwargs['queryset'] = Player.objects.filter(team=request.team) 
    
  2. 我几乎可以肯定要求不会实际上有一个属性team。除非你自己添加了一些代码,而不是在这里显示,否则你需要找到另一种方式来获得当前的“团队”。例如,您可以从request.path解析出团队ID,并将其用于查找。

作为一个侧面说明,else条款是不必要的,如果你只是去那里pass