【问题标题】:How do I handle database ORM situations like this in Django?如何在 Django 中处理这样的数据库 ORM 情况?
【发布时间】:2011-01-16 01:08:11
【问题描述】:
params['blog_posts'] = Content.objects.get(user = blah)
params['other_vars'] = "other stuff"
params['votes'] = 4245

if request.GET.get("format") == "json":
    response = json.dumps(params)
    return HttpResponse(response)
else: 
    return render_to_response("posts.html", params, RequestContext(request))

在我的模板中,我做这样的事情:

{% for p in blog_posts %}
    The author is: {{ p.user.get_profile.about_me }}
{% endfor %}

如您所见,我真正利用了 Django 的外键/数据库模型。问题是……我如何将所有这些外国模型拍摄成 JSON?

即使我使用django.core.serializers 序列化blog_posts,JSON 也不会包含.user 模型,当然也不会包含.get_profile 模型。

【问题讨论】:

    标签: python mysql database django


    【解决方案1】:

    一种选择是让您的模型类本身包含如何序列化自身的知识:

    class MyBaseModel(BaseModel):
        def serialize():
            abstract # this will throw an error if it's called without being overwritten
    
    class Post(MyBaseModel):
        title = db.stringProperty()
        body = db.textProperty()
        user = db.referenceProperty(User)
    
        # etc etc etc
        def serialize(self):
            return {
                'title' : self.title,
                'body' : self.body,
                'user' : self.user.serialize()
                # etc
            }
    

    【讨论】:

    • 什么是“MyBaseModel”?我什么都不做。我只是这样做:类内容(models.Model):
    • 啊,我通常在框架的基础模型和我的真实模型之间插入我自己的基础模型,所以如果我愿意,我可以对所有类进行更改。例如,在 save() 时,我喜欢将 updated_at 和 created_at 设置为当前时间。
    猜你喜欢
    • 2015-04-01
    • 2010-12-20
    • 1970-01-01
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-17
    相关资源
    最近更新 更多