【发布时间】:2016-01-03 12:58:02
【问题描述】:
models.py:
class Player(models.Model):
name = models.CharField(max_length=50)
email = models.EmailField(max_length=50)
class Tournament(models.Model):
name = models.CharField(max_length=50)
class TournamentPlayer(models.Model):
tournament = models.ForeignKey(Tournament)
player = models.ForeignKey(Player)
paid = models.BooleanField()
def player_email(self):
return self.player.email
admin.py:
class TournamentPlayerInline(admin.TabularInline):
model = TournamentPlayer
fields = ('player', 'paid', 'player_email')
@admin.register(Tournament)
class TournamentAdmin(admin.ModelAdmin):
inlines = [TournamentPlayerInline]
我有一个内联问题。当我在管理站点中启动锦标赛时,我可以看到哪些玩家参加了比赛,以及他们是否付费。我还想显示 Player 中包含的额外信息,例如电子邮件地址。
在 TournamentPlayerInline 中,我认为我可能能够摆脱 fields = ('player', 'paid', 'player_email'),但我得到 FieldError: Unknown field(s) (player_email) specified for TournamentPlayer。
我也试过fields = ('player', 'paid', 'player__email'),但我得到FieldError: Unknown field(s) (player__email) specified for TournamentPlayer。
如果我将player_email 从fields 移动到readonly_fields,我将不再收到错误消息,但也不会显示玩家电子邮件。
这就是我所追求的:
如何从 TournamentPlayerInline 访问 Player 属性?
Django 1.8.4
【问题讨论】:
-
您是否尝试过将
player_email设为@property?您也可以使用双下划线将其设为fields = ('player', 'paid', 'player__email')以表示外键关系。 -
我在
def player_email(self):上方添加了@property,没有效果。也试过 player__email 没有效果。 -
嗯...查看此问题中显示的管理员定义:stackoverflow.com/questions/163823/…
-
在
def player_email之后添加了player_email.admin_order_field = 'player__email',没有效果。 -
您希望
player_email在管理员中可编辑吗?否则,您只需将其从fields中删除并将其添加到readonly_fields即可。