如何在Django模板中显示对象名称而非ID?
解决Django外键下拉框显示ID而非分类名称的问题
嘿,我来帮你搞定这个问题!这其实是Django模型的一个常见小细节——默认情况下,模型对象的字符串表示是它的内存标识或者ID,所以下拉框才会显示ID而不是你想要的分类名称。咱们只需要两步就能解决:
1. 给Category模型添加__str__方法
Django在渲染表单的下拉选项时,会调用模型的__str__方法来生成显示的文本。你只需要修改models.py里的Category类,重写这个方法返回分类名称:
class Category(models.Model): name_category = models.CharField(max_length=45) # 添加这个方法,返回分类名称 def __str__(self): return self.name_category class Meta: db_table = 'category'
2. 修正ForeignKey的关联模型笔误
我注意到你Books模型里的ForeignKey关联的是'Editora',但你的分类模型明明是Category,这肯定是手滑打错了,得改成正确的模型名,不然不仅显示有问题,后续操作也会报错:
class Books(models.Model): ... # 把'Editora'改成'Category' category_cod_category = models.ForeignKey( 'Category', on_delete=models.CASCADE ) ... class Meta: db_table = 'Books'
做完这两步之后,重启你的Django服务,再打开表单页面,下拉框里就会显示分类的名称而不是ID啦!另外这个__str__方法还会在Django admin后台、打印对象等场景下生效,让你的模型对象显示更友好。
内容的提问来源于stack exchange,提问作者Nicole Esther
相关产品推荐
相关产品推荐

