2015-02-05 2 views
0
나는 모델이

:장고 REST는 컬 JSON을 위해 형성

class Emp(models.Model): 
    full_name = models.CharField(max_length=100) 
    mobile = models.CharField(max_length=10,blank=True,null=True) 
    email = models.EmailField(blank=True,null=True) 

class Enquiry(models.Model): 
    date = models.DateField(default=timezone.now) 
    number = models.AutoField(primary_key=True) 
    products = models.ManyToManyField(Product, related_name="products") 
    referred_by_emp = models.ForeignKey(
     Emp,related_name='ref_emp', 
     null=True,blank=True, 
     ) 

시리얼 라이저 클래스 :

class ReferrerSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Emp 
     fields = (
      'full_name','mobile','email', 
      ) 

class EnquirySerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Enquiry 
     fields = (
      'name','mobile','email', 
      'products', 
      'referred_by_emp', 
      ) 

나는에 EMP를, 즉 FULL_NAME, 모바일, 이메일의 속성을 얻기 위해 소원을 양식은 문의 세부 사항을 입력하는 동안. 2 개 모델에 대한 전망 :

class RefViewSet(viewsets.ModelViewSet): 
    """ 
    API endpoint that allows Emp instances to be viewed or edited. 
    """ 
    model = Emp 
    queryset = Emp.objects.all() 
    serializer_class = ReferrerSerializer 

class EnquiryViewSet(viewsets.ModelViewSet): 
     """ 
     API endpoint that allows Enquiry instances to be viewed or edited. 
     """ 
     model = Enquiry 
     queryset = Enquiry.objects.all() 
     serializer_class = EnquirySerializer 

가 장고 REST API의 문의 세부 정보를 입력하는 동안, 나는 또한 EMP를 세부 사항을 캡처하고 양식을 제출하고 싶습니다. 세부 사항은 각 모델에 반영되어야합니다. 어떻게이 일을 성취 할 수 있습니까? 나는 장고의 REST API를 처음 접했고 올바른 방법을 찾지 못했다. Plz은 이것을 달성하기위한 상세한 코드를 안내합니다. 나는 itertools.chain을 시도했지만 올바르게 사용하지 않았을 것입니다. 더 커다란 커링 명령을 호출하고 싶습니다. 미리 예를 들어. django를 사용하는 경우 1.6.5

+0

두 모델을 채우는 하나의 json blob을 제출 하시겠습니까? 또는 기존 Emp로부터의 문의를 채우십시오? – krs

+0

http://stackoverflow.com/users/992401/krs 두 모델을 채우는 하나의 json blob을 제출하십시오. – user956424

답변

1

좋습니다. 나는 단지 일어날 때 거기에 있었다.

class ReferrerSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Emp 
     fields = ('full_name','mobile','email') 


class EnquirySerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Enquiry 
     fields = ('name','mobile','email','products',) 


# As the fields doesn't already exist you can 'copy' them into the serializer 

EnquirySerializer.base_fields["full_name"] = ReferrerSerializer().fields["full_name"]    


# Then in the view we can create another model instance. 
# you should use the Serializer or a Form class and not save the data directly to a Emp instance here but i left that out for clarity. 

class SomeViewSet(ModelViewSet): 
    model = Enquiry 

    # post() should only handle new/create calls, but if you want it more clear you can override create() instead. 
    def post(self, request, *args, **kwargs): 
     self.emp_data = {} 
     self.emp_data["full_name"] = self.request.DATA.pop("full_name") 
     return super(SomeViewSet, self).post(request, *args, **kwargs) 

    def pre_save(self, obj): 
     emp = Emp.objects.create(**self.emp_data) 
     obj.referred_by_emp = emp 
     return obj 
+0

http://stackoverflow.com/users/992401/krs하지만 Emp 및 Display의 양식을 표시하고 싶습니다. 동시에 Emp 세부 사항을 추가 할 수 있습니다. 어떻게해야합니까? – user956424

+0

내 게시물 끝에 P.S 필드를 추가 한 다음 post()의 데이터에서 pop()을 입력하십시오. 이 사용법으로 예제를 업데이트합니다. – krs

+0

예외 : 뷰 이름 "state-detail"을 사용하여 하이퍼 링크 된 관계에 대한 URL을 확인할 수 없습니다. API에 관련 모델을 포함시키지 못했거나이 필드의 lookup_field 속성을 잘못 구성했을 수 있습니다. State, Country와 같은 문의 모델은 필수 사항이 아닙니다!이 @http : //stackoverflow.com/users/992401/krs를 어떻게 해결할 수 있습니까? – user956424