【问题标题】:Django admin. TabularInline. How to show ForeignKey related model in TabulatInline viewDjango 管理员。表格内联。如何在 TabulatInline 视图中显示 ForeignKey 相关模型
【发布时间】:2019-05-10 02:00:44
【问题描述】:

我试图在我的 django-admin 中显示相关模型的相关模型。 现在我的模型和 admin.py 看起来像:

class CharacterChoiceInline(admin.TabularInline):
    model = CharacterModel
    fields = ['nickname', 'gender', 'image']
    extra = 1


class UserModelAdmin(admin.ModelAdmin):
    fieldsets = [
        (None, {'fields': [
                'username', 'email', 
                ...
            ]
        })
    ]
    inlines = [CharacterChoiceInline]

admin.site.register(User, UserModelAdmin)

我的CharacterModel 与另一个模型RaceModel 相关。

class RaceModel(models.Model):
    name = models.CharField("Race", max_length=254)
    character = models.ForeignKey("CharacterModel",
        null=True, blank=True, on_delete=models.SET_NULL, related_name='+')


class CharacterModel(models.Model):
    nickname = models.CharField("Character nickname", max_length=254)
    gender = models.CharField(choices=GENDER, max_length=10, default='male')
    image = models.URLField(blank=True)

在 Admin 中看起来像这样:

如何添加这个额外的 RaceModel 字段作为 CharacterChoiceInline(admin.TabularInline): 的一部分,以便能够通过用户管理视图为每个字符选择“种族”?

【问题讨论】:

    标签: django foreign-keys django-admin


    【解决方案1】:

    您可能会发现先为单个 CharacterModel 创建一个管理页面会很有帮助,让事情正常运行,然后返回到 UserModel 管理屏幕上工作。

    您尝试做的事情很简单。只需向 CharacterModel 添加一个名为 race 的 ForeignKey 字段。它会在您的表单中显示为带有比赛选项的下拉选择。我建议在您的 RaceModel 中添加一个明确的 id 字段;您不想按名称链接字段。您需要一个在编辑文本时不会改变的主键。

    【讨论】:

    • character 只能有一个racerace 可以有一个或多个characters,这就是我这样定义的原因
    • 是的,如果你在 CharacterModel 中添加一个名为 race 的 ForeignKey 字段,那么每个 Race 可以有多个字符。
    • 我可以通过race模型查询所有相关字符吗?比方说:种族人类有 120 个字符对象
    • 是的,您可以在种族对象上遍历反向关系 charactermodel_set。
    最近更新 更多