Django中如何为QuerySet对象追加自定义属性?
解决方案
方法一:直接遍历赋值临时属性
Django模型实例本质就是Python对象,你可以直接在遍历QuerySet时给每个实例添加自定义属性,完全不影响原有字段和关联对象的访问:
jobs = Job.objects.all() for job in jobs: # 可根据每个job的实际情况设置不同的new_key值 job.new_key = "new_value"
之后在模板里就能直接使用:
{% for job in jobs %} <p>标题:{{ job.title }}</p> <p>自定义属性:{{ job.new_key }}</p> <p>用户名:{{ job.user.name }}</p> {% endfor %}
方法二:用模型属性(适合固定逻辑的自定义值)
如果new_key是基于Job实例现有字段计算的固定逻辑值,可以在模型类里添加带@property装饰器的方法,所有实例会自动拥有这个属性:
class Job(models.Model): title = models.CharField(_('Job Title'),max_length=150, blank=True, default="") description = models.CharField(_('Description'), max_length=250, blank=True, default="") user = models.ForeignKey('User', verbose_name="User", on_delete=models.CASCADE, null=True) def __str__(self): return self.title @property def new_key(self): # 这里写自定义计算逻辑,比如结合title生成值 return f"custom_{self.title}"
为什么job.update()不行?
update()是QuerySet对象的方法,用于批量更新数据库中的字段,并非给内存中的单个模型实例添加临时属性。单个Job实例没有update()方法,所以调用会报错。
内容的提问来源于stack exchange,提问作者Pedro Silva
相关产品推荐
相关产品推荐

