我想让我的api给我一个与tastypie的反向关系数据。
我有两个模型,DocumentContainer和DocumentEvent,它们相关:
DocumentContainer有许多DocumentEvents
这是我的代码:
class DocumentContainerResource(ModelResource):
pod_events = fields.ToManyField('portal.api.resources.DocumentEventResource', 'pod_events')
class Meta:
queryset = DocumentContainer.objects.all()
resource_name = 'pod'
authorization = Authorization()
allowed_methods = ['get']
def dehydrate_doc(self, bundle):
return bundle.data['doc'] or ''
class DocumentEventResource(ModelResource):
pod = fields.ForeignKey(DocumentContainerResource, 'pod')
class Meta:
queryset = DocumentEvent.objects.all()
resource_name = 'pod_event'
allowed_methods = ['get']
当我点击我的api url时,我收到以下错误:
DocumentContainer' object has no attribute 'pod_events
有人可以帮忙吗?
感谢。
答案 0 :(得分:12)
我在这里写了一篇博客文章:http://djangoandlove.blogspot.com/2012/11/tastypie-following-reverse-relationship.html。
这是基本公式:
class [top]Resource(ModelResource):
[bottom]s = fields.ToManyField([bottom]Resource, '[bottom]s', full=True, null=True)
class Meta:
queryset = [top].objects.all()
class [bottom]Resource(ModelResource):
class Meta:
queryset = [bottom].objects.all()
class [top](models.Model):
pass
class [bottom](models.Model):
[top] = models.ForeignKey([top],related_name="[bottom]s")
需要
答案 1 :(得分:1)
从class DocumentContainerResource(...)
更改您的行,
pod_events = fields.ToManyField('portal.api.resources.DocumentEventResource',
'pod_events')
到
pod_events = fields.ToManyField('portal.api.resources.DocumentEventResource',
'pod_event_set')
在这种情况下,pod_event
的后缀应为_set
,但根据具体情况,后缀可能是以下之一:
_set
_s
如果每个事件最多只能与一个容器相关联,请考虑更改:
pod = fields.ForeignKey(DocumentContainerResource, 'pod')
为:
pod = fields.ToOneField(DocumentContainerResource, 'pod')