Bar*_*icz 5 django django-queryset json-deserialization
有查询,比如SELECT *, 'hello' AS world FROM myApp_myModel我想将其序列化为 json。
似乎没什么大不了的,而且有很多类似的问题,但似乎没有一个给出直接的答案。
到目前为止我已经尝试过:
data = myModel.objects.raw(query)
# gives: ModelState is not serializable
json.dumps([dict(r.__dict__) for r in data])
# doesn't serialize 'world' column, only model fields:
serializers.serialize('json', data)
#dear God:
for r in data:
for k in dict(r.__dict__):
print(getattr(r,k))
Run Code Online (Sandbox Code Playgroud)
内置django 核心序列化器还没有准备好包含额外的字段(来自原始字段,也不来自注释表达式),它只是从_meta.local_fields.
你可以在django django/core/serializers/base.py源代码中看到它:
concrete_model = obj._meta.concrete_model #obj is an object model
...
for field in concrete_model._meta.local_fields:
if field.serialize or field is pk_parent:
if field.remote_field is None:
if (self.selected_fields is None
or field.attname in self.selected_fields):
self.handle_field(obj, field)
else:
if (self.selected_fields is None
or field.attname[:-3] in self.selected_fields):
self.handle_fk_field(obj, field)
Run Code Online (Sandbox Code Playgroud)
要解决您的问题,您可以使用非内置功能。您可以在项目中包含 REST 包。例如django Rest 框架可以处理额外的字段:
from django.db.models import F
from aula.apps.alumnes.models import MyModel
from rest_framework.renderers import JSONRenderer
data=MyModel.objects.annotate(dummy = F('some_field') )
class MyModelSerializer(serializers.ModelSerializer):
dummy = serializers.CharField()
class Meta:
model = MyModel
fields = ('some_other_field','dummy')
read_only_fields = (
'dummy',
)
m=MyModelSerializer(data, many=True)
JSONRenderer().render(m.data)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4460 次 |
| 最近记录: |