2015-05-20 133 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

非常感谢乔伊。 –