在我的Django模型中,我有10个字段,有3个字段是外键。 在我从GET请求收到的JSON数据中,我得到的是所有字段而不是外键。
我也做过这个,但我仍然没有在JSON数据中获取这些字段:
DataFields = MyData._meta.get_all_field_names()
class MyResource(ModelResource):
class Meta:
queryset = MyData.objects.all()
resource_name = 'Myres'
serializer = Serializer(formats=['json'])
filtering = dict(zip(DataFields, [ALL_WITH_RELATIONS for f in DataFields]))
例如,我在模型中有city
这样的字段,但是我从它获得的JSON中没有该字段。
有没有办法在JSON中我可以自动获得city:city__name
?
如果我这样做,那么我就会得到这个城市,但是我可以在没有定义的情况下这样做:
def dehydrate(self, bundle):
bundle.data["city_name"] = bundle.obj.city__name
return bundle
答案 0 :(得分:13)
您需要为外键字段创建related resources并将其嵌入MyResource
。如果您创建嵌入式资源full=True
,则在获取MyResource
时它会使其脱水,否则它会将其作为相关资源uri嵌入。
class RelatedResource(ModelResource):
class Meta:
...
class MyResource(ModelResource):
related = fields.ForeignKey(RelatedResource, full=True)
class Meta:
...
然后,您可以在GET请求中按?related__field=value
过滤到MyResource
。
如果您只是想要模型__unicode__
返回的字段,您可以尝试执行以下操作(而不是嵌入相关资源):
class MyResource(ModelResource):
city = fields.CharField(attribute="city")
class Meta:
...
其中“city”是MyData
模型上外键的字段名称。