2013-05-02 19 views

cevap

1

flowchart mu arıyorsunuz? nesnesini istediğiniz zaman gerçekten 'a bağlıdır. Dehidrasyon döngüsünde paket yoluyla, örn.

class MyResource(Resource): # fields etc. def dehydrate(self, bundle): # Include the request IP in the bundle if the object has an attribute value if bundle.obj.user: bundle.data['request_ip'] = bundle.request.META.get('REMOTE_ADDR') return bundle 

elle bir API Url ile bir nesneyi almak istiyorsanız

, varsayılan orm şeması aracılığıyla sadece sümüklüböcek veya birincil anahtar çapraz olabilir (veya herneyse) bir desen verilen?

2

Tastypie'nin Kaynak sınıfı (hangi ModelResource alt sınıflandırmadır) get_via_uri(uri, request) yöntemini sağlar. apply_authorization_limits(request, object_list) numaralı telefona yapılan aramaların, istediğiniz sonucu almazsanız, isteğinizi yetkinizi geçecek şekilde düzenlediğinizden emin olun.

Kötü bir alternatif, url'nizden kimliği ayıklamak için bir regex kullanıyor ve ardından tüm nesnelerin listesini filtrelemek için kullanıyor. Bu benim get_via_uri çalışana kadar benim kirli hack oldu ve bunu kullanarak tavsiye ETMEM. ;)

id_regex = re.compile("/(\d+)/$") 
object_id = id_regex.findall(your_url)[0] 
your_object = filter(lambda x: x.id == int(object_id),YourResource().get_object_list(request))[0] 
2

Sen get_via_uri kullanabilirsiniz, ancak @Zakum bahseder, o muhtemelen istemiyoruz yetkilendirme geçerli olacaktır. Bu yüzden böyle URI çözebilirsiniz görüyoruz bu yöntem için kaynağına kazma:

from django.core.urlresolvers import resolve, get_script_prefix 

def get_pk_from_uri(uri): 
    prefix = get_script_prefix() 
    chomped_uri = uri 

    if prefix and chomped_uri.startswith(prefix): 
     chomped_uri = chomped_uri[len(prefix)-1:] 

    try: 
     view, args, kwargs = resolve(chomped_uri) 
    except Resolver404: 
     raise NotFound("The URL provided '%s' was not a link to a valid resource." % uri) 

    return kwargs['pk'] 

Django uygulaması web sunucusu kökünde yer alıyorsa (yani get_script_prefix() == '/') o zaman bu aşağı kolaylaştırabilirsiniz:

view, args, kwargs = resolve(uri) 
pk = kwargs['pk']