2012-03-09 11 views
5

私は、チームに関連する選手を特定のフィクスチャに見せたいだけです。通常、私がそれをすると、それは私のすべての選手をデータベースから見せてくれます。ここに私のmodels.pyformfield_for_foreignkeyと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) 

ここで私の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. あなたはクエリセットで全体kwargsを交換しています。 kwargsは辞書でなければならない、とあなたが探している特定のキーは「クエリセット」です:私はほとんど肯定的要求が実際に属性teamを持っているつもりはないよ

    kwargs['queryset'] = Player.objects.filter(team=request.team) 
    
  2. 。ここに表示されていないコードで自分自身を追加していない限り、現在の「チーム」にアクセスする別の方法を見つける必要があります。チームIDをrequest.pathから解析し、それをルックアップなどに使用することができます。サイドノートとして

あなたがちょうどそこpassするつもりなら、else句は不要です。