2012-07-02 9 views
5

Il mio sito Django ha un modello di foto che rappresenta le foto nel sistema e sto utilizzando Django.contrib.comments per consentire agli utenti di commentare questi. Funziona tutto bene, ma mi piacerebbe estendere la mia API Tastypie per consentire l'accesso ai commenti per il mio PhotoResource utilizzando un URL come /api/v1/photo/1/comments dove 1 è l'id della foto. Sono in grado di ottenere che l'URL funzioni correttamente, ma indipendentemente dal tipo di filtro che sto facendo, mi sembra che restituisca sempre la serie completa di commenti anziché il set per la foto fornita. Ho incluso una selezione ridotta di mia API codice corrente di seguito:Restituzione di commenti di Django per una risorsa Tastypie

class CommentResource(ModelResource): 
    user = fields.ForeignKey(UserResource, 'user') 
    class Meta: 
     queryset = Comment.objects.all() 
      filtering = { 
       'user': ALL_WITH_RELATIONS, 
      } 

class PhotoResource(ModelResource): 
    user = fields.ForeignKey(UserResource, 'user') 
    class Meta: 
     queryset = Photo.objects.all() 
     filtering = { 
      'id': 'exact', 
      'user': ALL_WITH_RELATIONS 
     } 

    def prepend_urls(self): 
     return [url(r"^(?P<resource_name>%s)/(?P<pk>\w[\w/-]*)/comments%s$" % (self._meta.resource_name, trailing_slash()), self.wrap_view('get_comments'), name="api_get_comments"), 
     ] 

    def get_comments(self, request, **kwargs): 
     try: 
      obj = self.cached_obj_get(request=request, **self.remove_api_resource_names(kwargs)) 
     except ObjectDoesNotExist: 
      return HttpGone() 
     except MultipleObjectsReturned: 
      return HttpMultipleChoices("More than one resource is found at this URI.") 
     comment_resource = CommentResource() 
     return comment_resource.get_list(request, object_pk=obj.id, content_type=ContentType.objects.get_for_model(Photo)) 

Per quanto posso dire che è il filtro nell'ultima riga che non funziona. Penso che questo sia un po 'complicato a causa di contributi che utilizzano ContentTypes per collegarsi all'oggetto oggetto di commenti su cui immagino sia possibile che Tastypie non riesca a farcela. Ho provato un sacco di variazioni su questo, ma ancora non funziona. Mi sentivo abbastanza certo che qualcosa del genere avrebbe funzionato:

ctype = ContentType.objects.get_for_model(obj) 
comment_resource = CommentResource() 
return comment_resource.get_list(request, object_pk=obj.pk, content_type_id=ctype.id) 

ma ancora tutti i commenti sono stati restituiti.

Qualcuno ha qualche idea su come fare questo (o se è anche possibile)?

+0

Hai risolto? Se sì, come? – silviomoreto

risposta

1

Di solito invece di hackerarlo in PhotoResource, dovrei invece fare un filtro in CommentResource. Devi attivare il filtro per quel modello e l'url sarebbe simile a questa:?

/api/v1/commento/object__pk = 1 & content_type_id = 2

+0

Sì, ho pensato di fare qualcosa del genere ma per me non è un buon URL. Non sono mai interessato ai commenti stessi, solo commenti relativi a una foto, motivo per cui preferirei che l'URL fosse nel formato '/ photo/1/comments'. Ho fatto alcuni progressi su questo prima di essere sviato, quindi spero di poter condividere presto i miei risultati. – Roarster

+0

Hey @Roarster, anche io sto affrontando lo stesso problema, siamo in grado di risolverlo ?! – noahandthewhale

+1

Purtroppo no. Alla fine ho abbandonato Tastypie e ho usato [Django REST Framework] (http://django-rest-framework.org/). Tastypie è stato molto facile da ottenere, ma ho davvero faticato quando avevo bisogno di qualcosa di fuori dall'ordinario. DRF ha reso questo molto più facile anche se ha richiesto un po 'più di lavoro per andare avanti. Sembra anche essere un po 'più attivo sul lato dello sviluppo che è buono. – Roarster

Problemi correlati