我有一个 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/