美味 - 找不到嵌套资源字段



我有这个代码:

#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但如您所见,由于某种原因不起作用。

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

"video"字段给出的数据不是URI,不是类似字典的数据,也没有"pk"属性:21。

因此,这意味着整数 21 不符合该字段的要求,它也模糊地暗示了什么将满足要求。

首先,您可以发送 URI 作为记录,这可能是最正确的方式,因为 URI 确实是唯一的,而 pk 则不是。

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

或者,您可以发送具有 PK 字段集的类似字典的对象。

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

当您注释掉 ForeignKey 字段时,它之所以有效,是因为 tastypie 将其视为 IntegerField,可以由纯整数引用。

这让我发育迟缓了一段时间,希望对您有所帮助!

最新更新