尝试从Tastypie中的一个端点返回相关模型的数据,但相关数据始终为空

时间:2012-11-10 12:33:59

标签: django tastypie

我是Django的Tastypie包的新用户,并且已经启动并运行了我的API。我有一个端点试图返回一个模型及其相关模型的数据。即使我没有收到任何错误,相关模型的数据也总是空的(参见下面的例子):

{
    "collection": [],
    "first_name": "Bob",
    "last_login": "2012-11-10T20:00:25",
    "last_name": "Schliffman",
    "resource_uri": "/api/v1/user/2/",
    "username": "flip"
}

模型中有相应的数据(在管理控制台中验证),但它没有出现。以下是api.py中的相关资源定义:

class UserResource(ModelResource):
    collection = fields.ToManyField('maps.api.resources.CollectionResource', \
        attribute='collections', full=True, null=True)

    class Meta:
        queryset = User.objects.all()
        resource_name = 'user'
        fields = ['username', 'first_name', 'last_name', 'last_login']
        allowed_methods = ['get']


class CollectionResource(ModelResource):
    user = fields.ToOneField(UserResource, 'user')

    class Meta:
        queryset = Collection.objects.all()
        resource_name = 'collection'
        allowed_methods = ['get', 'post']

为了获得用相关数据填充collection属性,我需要做些什么?

1 个答案:

答案 0 :(得分:1)

这条线很关键:

collection = fields.ToManyField('maps.api.resources.CollectionResource', \
                 attribute='collections', full=True, null=True)

它的含义是在collections模型中查找User属性,然后使用CollectionResource表示每个属性。换句话说,您应该确保User模型具有collections属性。为此,您的Collection模型必须包含related_name的外键:

from django.contrib.auth.models import User
def Collection(models.Model):
    ...
    user = models.ForeignKey(User, related_name='collections')

如果你有这个,Tastypie应该能够获得这些收藏并在你的UserResource中显示它们。