2015-05-20 140 views
0
class SkyFileGroupPermissionResource(Resource): 

    sky_file = fields.ForeignKey(SkyFileResource,'sky_file',null=False) 
    group_id = fields.ForeignKey(SkyGroupResource,'group_id',null=False) 
    expires_at = fields.DateTimeField(attribute='expires_at',null=False) 
    cloud_url = fields.CharField(attribute='cloud_url') 
    is_active = fields.BooleanField(attribute='is_active',default=False) 
    new_devices_default_access = fields.BooleanField(attribute='new_devices_default_access',default=False) 

    class Meta: 
     queryset = SkyFileGroupPermission.objects.all() 
     resource_name = 'file_group_permissions' 
     authentication = ApiKeyAuthentication() 
     authorization = DjangoAuthorization() 
     allowed_methods = ['get','post','delete'] 

    def apply_authorization_limits(self,request,object_list): 
     return object_list.filter(sky_file__storage__user=request.user.skyuser) 

    def get_object_list(self,request): 
     return super(SkyFileGroupPermissionResource,self).get_object_list(request).filter(sky_file__storage_user=request.user.skyuser) 

爲什麼會出現在GET方法500 INTERNAL SERVER ERROR tastypie,我所有的API都做工精細,除了一個,它給我的錯誤500內部服務器錯誤tastypie

這是回溯消息

Traceback (most recent call last): 

    File "/home/gegham/django-tastypie/tastypie/resources.py", line 202, in wrapper 
    response = callback(request, *args, **kwargs) 

    File "/home/gegham/django-tastypie/tastypie/resources.py", line 433, in dispatch_list 
    return self.dispatch('list', request, **kwargs) 

    File "/home/gegham/django-tastypie/tastypie/resources.py", line 465, in dispatch 
    response = method(request, **kwargs) 

    File "/home/gegham/django-tastypie/tastypie/resources.py", line 1287, in get_list 
    objects = self.obj_get_list(bundle=base_bundle, **self.remove_api_resource_names(kwargs)) 

    File "/home/gegham/django-tastypie/tastypie/resources.py", line 1097, in obj_get_list 
    raise NotImplementedError() 

NotImplementedError 

做喲有任何想法,爲什麼它給那?

+0

您是否在不重寫方法的情況下使用抽象方法創建基類的子類?這就是爲什麼NotImplementedError被拋出。 – Wyrmwood

+0

我正在進行編輯,可以幫助您更好地理解錯誤。下一次,請嘗試瞭解追溯而不是將其作爲錯誤消息。我們也在這裏提供幫助,所以儘可能讓它更易讀,所以我們可以幫助你更好:) – Yeo

+0

爲了幫助你理解,'NotImplementedError'意味着你必須在某個類中實現一個特定的方法。在這種情況下,你必須看到最後的跟蹤消息:看起來'Resource'缺少一個叫做'obj_get_list'的方法。所以你必須以某種方式擁有這種方法。這個方法似乎可以在@JoeyWillhelm提到的'ModelResource'中找到。祝你好運,希望你能在這裏學到一些東西:) – Yeo

回答

0

根據Tastypie documentationget_object_list()需要在用戶級別實現。這意味着您不應該在該方法中調用super()

但是,如果您要使用ModelResource而不是Resource,則可以使用super()供您使用。

+0

非常感謝喬伊。 –