如何在Django模板中访问模型存储的字典对象属性?
解决方法
直接用TextField存字典的话,你在模板里写{{ things_object.car.color }}是取不到值的——因为TextField存的是序列化后的字符串,不是字典对象,字符串本身没有color属性。
下面给你两种可行的方案:
方案一:用JSONField(推荐)
Django 3.1及以上版本自带JSONField,能自动处理字典的序列化和反序列化,用法最简单:
模型定义
from django.db import models class Things(models.Model): car = models.JSONField() # 其他字段...
存储字典
直接把字典赋值给字段即可,无需手动序列化:
car = {'color': 'red', 'doors': 4} Things.objects.create(car=car)
模板访问
这时候你原本的写法就能正常生效:
Car color: {{ things_object.car.color }} Car doors: {{ things_object.car.doors }}
方案二:继续用TextField(手动处理序列化)
如果非要保留TextField,就得自己负责字典与字符串的转换:
模型定义
from django.db import models import json class Things(models.Model): car = models.TextField() # 其他字段... @property def car_dict(self): # 将存储的字符串转换为字典 return json.loads(self.car)
存储字典
存储时需要先把字典转为JSON字符串:
import json car = {'color': 'red', 'doors': 4} Things.objects.create(car=json.dumps(car))
模板访问
通过自定义的car_dict属性来访问字典内容:
Car color: {{ things_object.car_dict.color }}
内容的提问来源于stack exchange,提问作者Brian Risk
相关产品推荐
相关产品推荐

