2

어떻게 DRF에서 관련 객체를 직렬화 할 수 있습니까? 3 가지 모델 auth_user (User), ModelA, ModelB를가집니다.장고 레스트 프레임 워크에서 관련 객체 직렬화

내 모델 :

class ModelA(models.Model): 
    user = models.OneToOneField(auth_user, related_name = 'modelA') 
    name = models.CharField(max_length = 30) 

class ModelB(models.Model): 
    owner = models.OneToOneField(auth_user) 
    user = models.OneToOneField(auth_user, related_name = 'modelB') 
    type = models.ForeignKey(ModelD) 
    cost = models.IntegerField() 

class ModelD(models.Model): 
    type_desc = models.CharField(max_length = 40) 

내 serialilzers : 나는 때마다 지을 수 있었던이 '전용 이메일을 얻는 POST 요청을하고

data = {'email':'[email protected], 
     'password' : 'dummy', 
     'userA' : {'name' :'123'}, 
     'userB':{'type':1,'cost':'100'} 

을 통과하고있어

class A(serializers.ModelSerializer): 

    class Meta: 
    model = ModelA 
    fields = ('name',) 

class B(serializers.ModelSerializer): 

    class Meta: 
    model = ModelB 
    fields = ('type', 'cost',) 

class AuthUserSerilaizer(serializers.ModelSerializer): 

    userA = serializers.RelatedField(source = 'modelA') 
    userB = serializers.RelatedField(source = 'modelB') 

    class Meta: 
    model = User 
    fields = ('email', 'password', 'userA', 'userB',) 
    write_only_fields = ('password',) 

    @transaction.commit_manually 
    def restore_object(self, attrs, instance = None): 

    try: 
     user = User.objects.create_user(email = attrs.get('email'), password = attrs.get('password')) 
     modela = ModelA(user =user, name = attrs.get('name')) 
     modela.save() 
     transaction.commit() 
     return User(email = attrs.get('email')) 
    except Exception ,e: 
     transaction.rollback() 
     print repr(e) 

JSON과 userA와 userB가 아닌 패스워드 왜? 각 테이블에서 데이터를 순차적으로 비 직렬화 및 생성 할 수 있습니까?

+0

당신이 POST 요청 코드를 포함 할 수 있습니다 사용하여 액세스 할 수 있습니까? – WAF

+0

@WAF는 아약스를 통해 요청을하고 있습니다. 기능을 복사 해 주시겠습니까? – mithu

답변

1

는보기

from django.core.serializers.json import DjangoJSONEncoder 
import json 

response = json.dumps(data,cls=DjangoJSONEncoder) 
return HttpResponse(response, mimetype="application/json") 

에서 이것을 시도하고 성공 함수에서 당신은

usera_name = response.userA.name 
userb_type = response.userB.type 
userb_cost = response.userB.cost 
관련 문제