Tastypie - 嵌套资源场未发现(Tastypie - Nested Resource fi

2019-06-23 18:55发布

我有这样的代码:

#api model 

class VideoResource(ModelResource):
    class Meta:
        queryset = Video.objects.all()
        include_resource_uri = False
        resource_name = 'video'
        authorization = DjangoAuthorization()

class QuestionResource(ModelResource):

    user = fields.ToOneField(UserResource,'user',full=True)
    video = fields.ForeignKey(VideoResource,'video',full=True)

    class Meta:
        queryset = Question.objects.all()
        resource_name = 'question'
        include_resource_uri = False
        authorization = DjangoAuthorization()

    def obj_create(self, bundle, request=None, **kwargs):
        import json
        temp = json.loads(request.body, object_hook=_decode_dict)
        video = Video.objects.get(pk=temp['video'])
        return super(QuestionResource, self).obj_create(bundle, request, user=request.user, video=video)

#model

class Question(models.Model):
    text = models.CharField('Question',max_length=120)
    created = models.DateTimeField(auto_now_add=True)
    enabled = models.BooleanField(default=True)
    flag = models.BooleanField(default=False)
    allow_comments = models.BooleanField(default=True)
    thumbnail_url = models.CharField(default='video.jpg',blank=True, null=True,max_length=200)

    user = models.ForeignKey(User)
    video = models.ForeignKey(Video)

    def __unicode__(self): 
        return self.text;

class Video(models.Model):
    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now_add=True)
    url = models.URLField(default="")

    user = models.ForeignKey(User)

    def __unicode__(self): 
        return str(self.pk) + ' > ' + self.status

问题是发送该对象时,我得到这个错误:

{"video":21,"text":"sadasds"} 

“视频”领域已经被赋予这不是一个URI,而不是一个字典一样,没有一个“pk”文件的属性数据:21。

如果我评论这一行:

video = fields.ForeignKey(VideoResource,'video',full=True) 

一切工作正常,但我不能得到这个信息(视频)问到时/api/v1/questions/

我的问题是:

  • 我应该创建资源,一个发布和其他检索信息< - 这似乎不是一个很好的解决方案。 要么
  • 如何创建嵌套的资源? 我试图按照网上的例子http://django-tastypie.readthedocs.org/en/latest/cookbook.html#nested-resources但你可以看到由于某种原因不能正常工作。

也许你的眼睛可以帮我找到错误:)谢谢!

Answer 1:

“视频”领域已经被赋予这不是一个URI,而不是一个字典一样,没有一个“pk”文件的属性数据:21。

因此,这意味着整数21个简化版,满足该领域的需求,也给什么就符合要求一个模糊的暗示。

首先,你可以在URI送备案,这可能是因为URI是真正独特而PK的都不是最正确的方法。

{"video":"/api/v1/video/21","text":"sadasds"} 

或者,你可以在PK场设置字典的一致好评对象发送。

{"video":{'pk':21},"text":"sadasds"} 

究其原因,当你注释掉ForeignKey的领域是因为那时tastypie将其视为IntegerField,它可以通过一个普通的整数引用它的工作原理。

这让我阻碍了一会儿,希望它帮助!



文章来源: Tastypie - Nested Resource field not found