formfield_for_foreignkey和内联管理员

时间:2012-03-09 19:53:08

标签: django django-admin

我只想在特定的灯具中展示与球队相关的球员。通常当我这样做时,它会向我显示数据库中的所有玩家。这是我的models.py

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]

我哪里可能出错?

//小鼠

1 个答案:

答案 0 :(得分:8)

  1. 您正在使用查询集替换整个kwargskwargs必须是字典,您要查找的特定键是“queryset”:

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

  3. 作为旁注,如果您只是前往else,则不需要pass条款。