Как мне обрабатывать такие ситуации с базой данных ORM в Django? - PullRequest
1 голос
/ 16 января 2011
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?

Даже если я сериализую blog_posts с использованием django.core.serializers, JSON не будет содержать модель .user и, конечно, не будет содержать модель .get_profile.

1 Ответ

3 голосов
/ 16 января 2011

Один из вариантов заключается в том, чтобы ваш класс модели содержал знание о том, как сериализовать себя:

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
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...