【问题标题】:Using __init__ in django to annotate a model with extra information在 django 中使用 __init__ 为模型添加额外信息
【发布时间】:2011-09-02 19:05:51
【问题描述】:

我为我的一个模型编写了一个 __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 不是正确的方法。感谢您的帮助!

【问题讨论】:

  • 如果你想包含原始模型中没有的属性,你必须编写自己的序列化程序

标签: python django serialization


【解决方案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!"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-23
    • 1970-01-01
    • 2012-03-25
    • 2016-12-28
    • 1970-01-01
    • 1970-01-01
    • 2011-01-19
    • 1970-01-01
    相关资源
    最近更新 更多