2012-09-07 13 views
5

se qualcuno legge la mailing list Tastypie: non ho ricevuto risposta, quindi mi dispiace per il crosspost qui.Costruire gli URL inversi in get_resource_uri

In Tastypie, ho modificato il pattern URL di una risorsa, perché utilizzo un'altra chiave rispetto al PK. Funziona bene quando accedo alla risorsa. Ora voglio nidificare questa risorsa in una risorsa padre, ma la risorsa nidificata contiene gli URI con il PK, non la mia chiave personalizzata. Quello che ho imparato è che nel mio caso, devo cambiare get_resource_uri del bambino.

Il metodo di risorsa di mio figlio (che è un NamespacedResource) si presenta così:

def get_resource_uri(self, bundle_or_obj): 

    obj = bundle_or_obj.obj if isinstance(bundle_or_obj, Bundle) else bundle_or_obj 

    kwargs={ 
     'resource_name': self._meta.resource_name, 
     'custom_id': obj.custom_id 
     } 

    return self._build_reverse_url('api_dispatch_detail', kwargs=kwargs) 

metodo Ignora URL del bambino è questo:

def override_urls(self): 
    return [ 
     url(r"^(?P<resource_name>%s)/(?P<custom_id>[-_\w\d]+)%s$" % (
       self._meta.resource_name, 
       trailing_slash() 
      ), 
      self.wrap_view('dispatch_detail'), 
      name="api_dispatch_detail" 
     ), 
    ] 

Ma l'applicazione non può invertire l'URL. Viene visualizzato questo errore:

Reverse for 'api_dispatch_detail' with arguments '()' and keyword arguments '{'custom_id': u'3_ee5-4423', 'resource_name': 'myresource'} not found. 

Come si inverte correttamente l'URL?

Grazie in anticipo.

risposta

2

Gli urls interni del tastypie hanno sempre bisogno di resource_name e api_name kwargs.

vostri kwargs dovrebbero contenere:

kwargs = { 
    'api_name': 'v1', # Or whatever you have set for your api 
    'resource_name': self._meta.resource_name, 
    'custom_id': obj.custom_id 
} 
+0

perfetto, grazie! – schneck

Problemi correlati