2012-09-07 1 views
5

में रिवर्स यूआरएल बिल्डिंग अगर कोई टेस्टपी-मेलिंगलिस्ट पढ़ता है: मुझे वहां कोई जवाब नहीं मिला, इसलिए क्रॉसपोस्टिंग के लिए खेद है।get_resource_uri

Tastypie में, मैं एक संसाधन के URL पैटर्न बदल गया है, क्योंकि मैं पी की तुलना में एक और कुंजी का उपयोग करें। जब मैं संसाधन तक पहुंचता हूं तो यह ठीक काम करता है। अब मैं इस संसाधन को मूल संसाधन में घोंसला करना चाहता हूं, लेकिन नेस्टेड संसाधन में पीके के साथ यूआरआई शामिल है, न कि मेरी कस्टम कुंजी। मैंने जो सीखा वह यह है कि मेरे मामले में, मुझे बच्चे के get_resource_uri को बदलना होगा।

अपने बच्चे के संसाधन में विधि (जो एक NamespacedResource है) इस तरह दिखता है:

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" 
     ), 
    ] 

लेकिन आवेदन यूआरएल रिवर्स नहीं कर सकते हैं:

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) 

बच्चे के यूआरएल ओवरराइड विधि यह है। मैं कैसे ठीक से यूआरएल को उल्टा करते

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

: मैं इस त्रुटि मिलती है?

अग्रिम धन्यवाद।

उत्तर

2

tastypie के आंतरिक यूआरएल को हमेशा resource_name और api_name kwargs की आवश्यकता होती है।

आपका kwargs शामिल करना चाहिए:

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

सही है, धन्यवाद! – schneck