views.py
我正在创建一个我想序列化并作为JSON返回的查询集.查询集如下所示:
all_objects = Program.objects.all()
test_data = serializers.serialize("json", all_objects, use_natural_keys=True)
Run Code Online (Sandbox Code Playgroud)
除了"用户"模型(跨两个模型链接)之外,这将拉回所有内容.
models.py
from django.db import models
from django.contrib.auth.models import User
class Time(models.Model):
user = models.ForeignKey(User)
...
class CostCode(models.Model):
program_name = models.TextField()
...
class Program(models.Model):
time = models.ForeignKey(Time)
program_select = models.ForeignKey(CostCode)
...
Run Code Online (Sandbox Code Playgroud)
题
我返回的数据有Time,Program和CostCode信息,但我无法查询'User'表.如何在同一个查询集中找回"用户名"(来自用户表)?
注意:我已将我的查询集更改为all_objects = Time.objects.all(),这会获取用户信息,但之后它不会引入"CostCode".我的模型也有ModelManagers返回,get_by_natural_key所以相关字段出现在我的JSON中.
最终,我希望所有四个模型的数据都出现在我的序列化JSON字段中,我只是缺少'用户名'.
这是一张JSON对象当前如何出现在Firebug中的图片:

谢谢你的帮助!
乍一看似乎有点重量级,但你可以看看使用 Django REST Framework:
http://www.django-rest-framework.org/api-guide/serializers#modelserializer
您可以定义和使用序列化器类,而无需对框架执行任何其他操作。序列化器返回一个 python 字典,然后可以轻松地将其转储为 JSON。
要从每个相关模型中获取所有字段作为嵌套字典,您可以执行以下操作:
class ProgramSerializer(serializers.ModelSerializer):
class Meta:
model = Program
depth = 2
all_objects = Program.objects.all()
serializer = ProgramSerializer(all_objects, many=True)
json_str = json.dumps(serializer.data)
Run Code Online (Sandbox Code Playgroud)
要自定义每个模型包含哪些字段,您需要为每个模型定义一个 ModelSerializer 类,例如仅username输出time.user:
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('username', )
class TimeSerializer(serializers.ModelSerializer):
"""
specifying the field here rather than relying on `depth` to automatically
render nested relations allows us to specify a custom serializer class
"""
user = UserSerializer()
class Meta:
model = Time
class ProgramSerializer(serializers.ModelSerializer):
time = TimeSerializer()
class Meta:
model = Program
depth = 1 # render nested CostCode with default output
all_objects = Program.objects.all()
serializer = ProgramSerializer(all_objects, many=True)
json_str = json.dumps(serializer.data)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
700 次 |
| 最近记录: |