我为我的一个模型写了一个__init__方法,它通过动态地向对象添加一个不反映数据库中列的属性来向对象添加一些辅助信息:
class MyModel(models.Model):
title = Models.CharField()
description = Models.TextField()
def __init__(self, *args, **kwargs):
self.aux_info = "I'm not in the database!"
这似乎工作正常,但我找到了一个不起作用的案例。我在视图中有一些代码,我在其中设置状态变量并将MyModels
列表打包成json,如下所示:
from django.core import serializers
from django.utils import simplejson
...
# have to use serializers for django models
serialized_items = serializers.serialize("json", itemlist)
data["items"] = serialized_items # serialized_items is now a string
data["status"] = status
# package up data dict using simplejson for python objects
resp = simplejson.dumps(data)
return HttpResponse(resp, mimetype="application/javascript")
问题似乎是django的序列化程序只序列化模型字段而不是对象的所有属性,因此aux_info不会通过。我也很确定使用序列化器和simplejson都不是正确的方法。谢谢你的帮助!
答案 0 :(得分:1)
尝试使用序列化程序的可选字段参数。
serialized_items = serializers.serialize("json", itemlist, fields=['.....', 'aux_info'])
我还建议使用__init__
方法添加字段在django中被认为是错误的形式,并且会更好地实现:
class MyModel(models.Model):
title = Models.CharField()
description = Models.TextField()
def aux_info(self):
return "I'm not in the database!"