我是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
属性,我需要做些什么?
答案 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
中显示它们。