如何在Tastypie中加载外键元素

Ran*_*ngh 9 python django tastypie

在我的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]))
Run Code Online (Sandbox Code Playgroud)

例如,我在模型中有字段city,但是我从它获得的JSON中没有该字段.

有什么方法可以在JSON中city:city__name自动获取吗?

如果我这样做,那么我就会得到这座城市,但是我可以在没有定义的情况下这样做:

def dehydrate(self, bundle):
        bundle.data["city_name"] = bundle.obj.city__name
        return bundle
Run Code Online (Sandbox Code Playgroud)

Bla*_*ake 13

您需要为外键字段创建相关资源并将其嵌入MyResource.如果你创建了嵌入式资源full=True,它会在获取时将其脱水MyResource,否则它会将其作为相关资源uri嵌入.

class RelatedResource(ModelResource):
    class Meta:
        ...


class MyResource(ModelResource):
    related = fields.ForeignKey(RelatedResource, full=True)

    class Meta:
        ...
Run Code Online (Sandbox Code Playgroud)

然后,您可以?related__field=value在GET请求中过滤MyResource.


如果您只是想要模型返回的字段__unicode__,您可以尝试执行以下操作(而不是嵌入相关资源):

class MyResource(ModelResource):    
    city = fields.CharField(attribute="city")

    class Meta:
        ...
Run Code Online (Sandbox Code Playgroud)

其中"city"是MyData模型上外键的字段名称.