formfield_for_foreignkey и Inline Admin - PullRequest
6 голосов
/ 09 марта 2012

Я хочу показать только игрокам, связанным с командой, в определенном матче.Обычно, когда я делаю это, он показывает мне всех моих игроков из базы данных.Вот мой 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 Ответ

8 голосов
/ 10 марта 2012
  1. Вы заменяете все kwargs набором запросов.kwargs должен быть словарем, и конкретный ключ, который вы ищете, это 'queryset':

    kwargs['queryset'] = Player.objects.filter(team=request.team)
    
  2. Я почти уверен, что запрос на самом деле не будетатрибут team.Если вы не добавили его самостоятельно в какой-то код, не показанный здесь, вам нужно найти другой способ попасть в текущую «команду».Вы можете проанализировать идентификатор команды из request.path и использовать его для поиска, например.

В качестве примечания, выражение else не нужно, если вы простособирается туда pass.

...