Eliminando objetos en Django Tastypie.

Tengo los siguientes modelos:

class Poster(models.Model) user = models.OneToOneField(User, primary=True) userpicture = models.CharField(max_length = 128 =True) class Posts(models.Model) poster = models.ForeignKey(Poster, related_name = 'post_owner') url = models.CharField(max_length = 128) time = models.DateTimeField(auto_now_add=True) class Comment(models.Model): user = models.ForeignKey(Poster) post = models.ForeignKey(Posts) time = models.DateTimeField(auto_now_add=True) comment = models.CharField(max_length=140) 

Un póster puede hacer una publicación y otros pósteres pueden comentar sobre esa publicación. Algo así como un blog funciona. Me gustaría hacerlo para que el propietario de la publicación tenga la opción de eliminar sus propios comentarios y los comentarios de otros carteles en su publicación.

¿Cómo puedo hacer esto?

Actualmente estoy usando Django Tastypie. Aquí está mi recurso actual:

 class DeleteComment(ModelResource): class Meta: queryset = Comment.objects.all() allowed_methods = ['delete'] resource_name = 'comment-delete' excludes = ['id', 'comment', 'post', 'time'] authorization = Authorization() authentication = BasicAuthentication() include_resource_uri = False always_return_data = True 

¡Esto funciona sin embargo! ¡Esto permite a cualquier usuario eliminar cualquier comentario, incluso si no es el suyo, lo que no es bueno! ¿Cómo?

Simplemente enviando una solicitud DELETE a: myapp.com:8000/v1/posts/comment-delete/ 8 / borra el objeto Comment que tiene un id de 8 . Aquí es donde la configuración está fallando.

Necesito una forma para que solo el propietario de la publicación pueda eliminar sus comentarios y los comentarios de otros en su publicación.

Esto se hace mejor con autorización .

delete_detail implementar el método delete_detail para devolver True o False, por ejemplo:

 def delete_detail(self, object_list, bundle): return bundle.obj.user == bundle.request.user 

Como se explica en el sabroso libro de cocina . Tal vez puedas hacer algo como esto:

 class DeleteComment(ModelResource): def obj_delete(self, bundle, **kwargs): # get post id comment = Comment.objects.get(pk=bundle.data.id) # or or whatever way you can get the id # delete all comments with that post id Comment.objects.filter(post=comment.post).delete() return super(DeleteComment, self).obj_delete(bundle, user=bundle.request.user) def apply_authorization_limits(self, request, object_list): return object_list.filter(user=request.user)