如何更改 django admin 外键下拉列表中的显示文本
我有一个任务列表,能够分配用户。所以我在数据库中有用户模型的外键。但是,下拉菜单中默认显示的是用户名,我想显示全名(名字和姓氏)而不是用户名。如果外键指向我自己的类之一,我可以只更改模型中的 str 函数,但是 User 是一个 django 身份验证模型,所以我不能轻易地直接更改它,对吧?
有人知道如何做到这一点吗?
多谢!
I have a task list, with ability to assign users. So I have foreignkey to User model in the database. However, the default display is username in the dropdown menu, I would like to display full name (first last) instead of the username. If the foreignkey is pointing to one of my own classes, I can just change the str function in the model, but User is a django authentication model, so I can't easily change it directly right?
Anyone have any idea how to accomplish this?
Thanks a lot!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您可以为您的任务模型创建一个新的 ModelForm,它将显示您喜欢的用户列表(此处的代码假定名为 Task 的模型具有“user”属性):
然后,告诉您的 ModelAdmin 类使用新表单:
You can create a new ModelForm for your Task model, which will display the list of users however you like (code here assumes a model named Task with a 'user' attribute):
Then, tell your ModelAdmin class to use the new form:
还有另一种选择:
There is another choice:
更通用、更详细的解决方案,使用 ModelChoiceField 作为基础。避免摆弄查询集,只专注于修改下拉列表中的可见值。
A more generic, verbose solution, using a ModelChoiceField as base. Avoids fiddling with querysets, just focusing on modifying the visible value in the dropdown.
通过重写 formfield_for_foreignkey( ),您可以向Django Admin显示“first_name”和“last_name”的组合,而无需创建自定义“表单。 ModelChoiceField”和自定义“forms.ModelForm”如下所示:
By overriding formfield_for_foreignkey(), you can display the combination of "first_name" and "last_name" to Django Admin without creating a custom "forms.ModelChoiceField" and a custom "forms.ModelForm" as shown below: