2012-09-04 5 views
2

하나의 (POST) API 호출로 두 모델에 대한 업데이트와 관련하여 tastypie에 문제가 있습니다.django tastypie 두 모델을 업데이트하십시오

사용자 모델과 사용자 모델을 참조하는 후보 모델이라는 두 가지 모델이 있습니다. 우리는 api 인터페이스를 통해 후보 모델을 게시하려고하지만 사용자 모델을 숨기려고합니다. 그래서 첫 번째 단계로 사용자 모델 필드를 탈수 과정의 후보 모델 필드와 병합합니다. 이것은 정상적으로 잘 작동합니다.

문제는 내가 알아낼 수있다, 라운드 그것을 다른 방법을 수행하는 방법 (수화물을하고 두 모델을 만들 수 있습니다. 우리는 별도의 사용자 모델을 작성해야하고 위선적 인 말투는 두 모델을 병합)

답변

4

당신에게 우리에게 몇 가지 코드를 보여 주면 어떤 것이 좋겠지 만, 이런 종류의 작업에서는 tastypie.resources.ModelResource 클래스의 obj_create(...) 메서드를 무시해야합니다.

그것은 다음과 같습니다

def obj_create(self, bundle, request=None, **kwargs): 
     """ 
     A ORM-specific implementation of ``obj_create``. 
     """ 
     bundle.obj = self._meta.object_class() 

     for key, value in kwargs.items(): 
      setattr(bundle.obj, key, value) 

     bundle = self.full_hydrate(bundle) 

     # Save FKs just in case. 
     self.save_related(bundle) 

     # Save the main object. 
     bundle.obj.save() 

     # Now pick up the M2M bits. 
     m2m_bundle = self.hydrate_m2m(bundle) 
     self.save_m2m(m2m_bundle) 
     return bundle 

그래서 리소스에 당신은 같은 것을 할 수 :

from tastypie.resources import ModelResource 

class MyResource(ModelResource): 

    def obj_create(self, bundle, request = None, **kwargs): 
     # ... 
     # create User instance based on what's in the bundle 
     # user = ... 
     # ... 
     # kwargs[ 'user' ] = user < will be set on Candidate instance in super() 
     # ... 

     # call super, resulting in creation of the Candidate model 
     super(MyResource, self).obj_create(self, bundle, request, **kwargs) 

을 그리고 이것은 당신이 시작할 수 있어야합니다. 문제가 있으면 질문을하고 코드를 입력하십시오.

관련 문제