2012-04-09 25 views
6

Tastypie'yi kullanarak yeni bir öğe oluşturulduğunda, bunu çoktan çoğa alan olan bir kullanıcının özniteliğine ekleyebilmeyi istiyorum. şu anda benim obj_create şöyle görünür: Ben request.user en nitelik goal_list eklemek mümkün istediğinizdeTastypie obj_create - yeni oluşturulan nesne nasıl kullanılır?

def obj_create(self, bundle, request=None, **kwargs): 
    return super(GoalResource, self).obj_create(bundle, request, user=request.user) 

Ben yeni bir nesne oluşturmak istiyorum ama. Ancak, sahip olduğum veri tabanındaki nesneyi hemen oluşturacaktır. Nesneyi nasıl oluşturur ve sonra kullanıcının goal_list özniteliğine eklerim?

cevap

10

Sen bize kaynak tanımını gösterir, ancak temel sınıf olarak tastypie.resources.ModelResource kullandığınız varsayarak vermedi bu çalışması gerekir:

def obj_create(self, bundle, request=None, **kwargs): 
    bundle = super(GoalResource, self).obj_create(
     bundle, request, user=request.user) 

    user = request.user 
    user.goals.add(bundle.obj) 
    user.save() 
    return bundle 

Bu ModelResource sınıfının obj_create yöntemi içeren bir paket döndürür çünkü Kaydedilen nesne (bundle.obj) ve bu nesneyi, gösterildiği gibi obj_create yönteminizde işleyebilir ve yalnızca iade edebilirsiniz.

Ayrıca, request.user öğesinin geçerli bir User nesnesini (yani, kimliği doğrulanmış) içerdiğini varsaydım, bunun işe yaramadığından emin olmanız ya da olmadığı zaman bir hata işleme kodu eklemeniz gerekir.

Umut bu yardımcı olur :)

5

Henüz bu yüzden ikinci bir cevap vereceğini düşündüm yorum yapmak yeterli itibar yok. Yukarıdaki cevap doğrudur sadece bu istekleri obj_create çağrısında artık mevcut değil eklemek istedim. Sen bundle.request yoluyla cari isteği erişebilirsiniz: Yukarıdaki yanıt için

http://django-tastypie.readthedocs.org/en/latest/resources.html#accessing-the-current-request

sayesinde, hem bana yardımcı oldu!

+0

Yanıtlar bu konudan dolayı güncellenmesi gereken her yer :) – teewuane

İlgili konular