【问题标题】:A foreign key field is not rendered inside an inline model admin in django外键字段未在 django 的内联模型管理中呈现
【发布时间】:2014-12-03 13:27:56
【问题描述】:

我正在创建一个小型网站来注册体育赛事结果。我有以下两个模型:

  • 团队
  • 球员(球队)
  • 匹配
  • 进球数(由球员在比赛中得分)

更详细:

class Team(models.Model):
    name = models.CharField(max_length=255)

class Player(models.Model):
    team = models.ForeignKey(Team)
    name = models.CharField(max_length=255)
    total_goals = models.IntegerField(default=0)

    def __unicode__(self):
        return u"%s (%s)" % (self.name, self.team)


class Match(TimeStampedModel):
    competition = models.ForeignKey(Competition)
    league = models.ForeignKey(League, null=True, blank=True)  # null==True, ha osztalyozo

    home = models.ForeignKey(Team, related_name="merkozes_home")
    away = models.ForeignKey(Team, related_name="merkozes_away")
    home_score = models.SmallIntegerField(blank=True, null=True)
    away_score = models.SmallIntegerField(blank=True, null=True)
    goal_list = models.ManyToManyField(Player, through='Goal')

    @property
    def winner(self):
        return self.home if self.home_score > self.away_score else self.away

    @property
    def loser(self):
        return self.home if self.home_score < self.away_score else self.away

    class Meta:
        unique_together = (('league', 'home', 'away'),)

    def __unicode__(self):
        return u"%s - %s (%s)" % (self.home, self.away, self.competition)


class Goal(TimeStampedModel):
    player = models.ForeignKey(Player)
    ,atch = models.ForeignKey(Match)
    goals = models.SmallIntegerField(default=0)
    self_goal = models.BooleanField(default=False, blank=True)

我想在 django 管理员下编辑目标和比赛详情。因此,我创建了以下管理模型:

class GoalsInline(admin.TabularInline):
    model = Goal
    extra = 1

@admin.register(Match)
class MerkozesAdmin(admin.ModelAdmin):
    inlines = [GoalsInline]

奇怪的是,我的 admin inline 不显示 player 字段,只显示 Goal 模型中的其他字段。我也检查了html代码,它甚至不是隐藏字段。

您知道这可能是什么原因吗?如何才能显示所有字段?

【问题讨论】:

    标签: django django-admin django-modeladmin


    【解决方案1】:

    您的 GoalsInline 将仅显示 Player 对象的选择字段,因为它是 ForeignKey。

    另一种方法是在管理员中注册 Player 类,以便在内联中显示加号,以便您可以从该内联中添加新的 Player 对象。

    @admin.register(Player)
    class PlayerAdmin(admin.ModelAdmin):
        pass
    

    【讨论】:

      猜你喜欢
      • 2013-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-08
      • 2012-08-24
      • 1970-01-01
      • 1970-01-01
      • 2017-05-06
      相关资源
      最近更新 更多