如何在Tastypie中加载外键元素

时间:2012-11-09 02:18:47

标签: 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]))

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

有没有办法在JSON中我可以自动获得city:city__name

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

def dehydrate(self, bundle):
        bundle.data["city_name"] = bundle.obj.city__name
        return bundle

1 个答案:

答案 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模型上外键的字段名称。