2012-04-20 22 views
7

我有這樣的代碼:Tastypie - 嵌套資源領域沒有找到

#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.

如果我評論這個li NE:

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

一切工作正常,但我不能得到這個信息(視頻) 問到/api/v1/questions/

我的問題的時候是:

也許你的眼睛可以幫助我找到錯誤:) 謝謝!

+0

你會提供如何發送請求嗎? – mhaligowski 2012-05-09 07:39:24

回答

6

的「視頻」字段被賦予這不是一個URI,數據不是詞典酷似和不具有「pk」文件屬性:21.

所以,這意味着該整數21不符合該領域的要求,它也給出了滿足要求的模糊提示。

首先,您可以發送記錄的URI,這可能是最正確的方式,因爲URI真的是唯一的,而pk不是。

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

或者,您可以發送字典相似的對象與PK字段設置。

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

當你註釋掉ForeignKey的領域是因爲那時tastypie將其視爲IntegerField,它可以通過一個普通的整數引用它的作品的原因。

這讓我髮梢了一陣子,希望它有幫助!