python - Django |管理员将外键显示为字段而不是对象

标签 python django

我有一个 Django 项目,具有以下两个模型设置:

class List(models.Model):
    team = models.ForeignKey(Team, on_delete=models.CASCADE)
    name = models.CharField(max_length=50)


class ListItem(models.Model):
    team_list = models.ForeignKey(List, on_delete=models.CASCADE)
    content = models.TextField()
    index = models.IntegerField()

我已将它们在我的管理员中注册,如下所示:

class ListAdmin(admin.ModelAdmin):
    list_display = ('team_name', 'name')

    def team_name(self, obj):
        return obj.team.name


admin.site.register(List, ListAdmin)


class ListItemAdmin(admin.ModelAdmin):
    list_display = ('team', 'team_list_name', 'index')

    def team(self, obj):
        return obj.team_list.team.name

    def team_list_name(self, obj):
        return obj.team_list.name


admin.site.register(ListItem, ListItemAdmin)

这很棒,因为现在当我在 Django Admin 中查看所有“列表项”时,我可以轻松看到每个项所属的列表的名称。

但是,当我在管理中添加新列表项时,我只能将列表作为对象查看(例如:“列表对象 (1)”)。如何才能使外键的下拉菜单显示对象字段而不是对象类型?

最佳答案

下拉列表中使用的字符串将来自相关对象中的 __str__ 方法。因此,要纠正此问题,您所需要做的就是更新模型:

class List(models.Model):
    team = models.ForeignKey(Team, on_delete=models.CASCADE)
    name = models.CharField(max_length=50)

    def __str__(self):
        # Return a string that represents the instance
        return f"List {self.name}"

关于python - Django |管理员将外键显示为字段而不是对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66037390/

相关文章:

python - 如何使用python运行带有参数的exe文件

Python 函数装饰器调用

django - 为什么 django test --keep-db 适用于 postgres 数据库但不适用于默认的 sqlite3

django - 使用 django-jenkins 运行覆盖测试

python - 将 Django channel 与现有 Django 3.1 wsgi 代码集成时出错

python - django-rosetta 文件是只读的

python - 一个线性条件,多个变量并检查它们是否全部不为假?

python - 在 Makefile 中嵌入 Python 来设置 make 变量

python - Python错误:需要以下参数:-p/-shape-predictor

django - 使用 Celery 运行具有不同优先级的相同任务