0

我是 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属性填充相关数据的任何想法?

4

1 回答 1

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.

于 2012-11-10T13:04:05.130 回答