2

그래서 사용자 정의 모델 - 프로필, 장고 사용자 개체와 OneToOne 관계가 있습니다.DRF Serializer 사용자 생성을위한 중첩 필드

class Profile(models.Model): 
    user = OneToOneField(User, on_delete=models.CASCADE) 
    profile_type = models.CharField() 

나는 사용자 개체의 중첩 된 속성의 생성과 검색의 생성뿐만 아니라 "PROFILE_TYPE"속성을 허용하는 장고 나머지 프레임 워크 시리얼을 만들고 싶어.

나는 이름이 단순히 등 "사용자 이름", "비밀번호", "이메일"로 POST 요청에 지정하려는 - ... 대신에 "profile_username", "profile_password"의,

ImproperlyConfigured: Field name 'profile_user_username' is not valid for model 'Profile' 

내가 잘못 중첩 된 필드의 구문을 받고 있습니까 : 나는 오류가 발생했습니다 - 지금까지 나는

class ProfileSerializer(serializers.ModelSerializer): 
    username = serializers.CharField(source='profile_user_username') 
    password = serializers.CharField(source='profile_user_password') 
    email = serializers.CharField(source='profile_user_email') 

    class Meta: 
     model = Profile 
     fields = ('id', 
        'profile_user_username', 'profile_user_password', 'profile_user_email', 
        'username', 
        'password', 
        'email') 
     depth = 2 

을 가지고 있지만? 아니면 다른 것입니까?

+0

당신이 시도 했나'''소스 = 'profile.user.username''''? –

답변

3

시도 :

class User(models.Model): 
    username = models.CharField() 
    password = models.CharField() 
    email = models.CharField() 

class UserSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = User 

class ProfileSerializer(serializers.ModelSerializer): 
    user = UserSerializer(many=True) 
    class Meta: 
     model = Profile 
     fields = ('user', 'profile_type',) 

    def create(self, validated_data): 
     user_data = validated_data.pop('user') 
     user = User.objects.create(**user_data) 
     profile = Profile.objects.create(user=user, **validated_data) 
     return profile 

및 쓰기 가능 중첩 된 시리얼에 대한 this을 확인하십시오. 중첩 된 객체를 처리하기위한

: 체크 아웃이 this

+0

흠, 주사위가 없습니다. profile_user.username – codepringle

+0

안녕하세요, @codepringle 등 다른 유사 콘텐츠도 사용해 보았습니다. 너의 질문을주의 깊게 읽은 후에. 당신이 정말로 원하는 것은 쓸 수있는 중첩 시리얼 라이저 (serializer)입니다. 내 대답을 편집 했으므로 필요에 맞는 지 확인할 수 있습니다. –

+0

안녕하세요, 이것이 제가 주로 필요한 것이 었습니다. 그러나 이것을 포함하도록 답변을 업데이트 할 수 있다면 그것을 좋아할 것입니다. 맞춤형 UserSerializer를 만드는 것 외에도 ProfileSerializer의 create (self, validated_data) 메소드를 재정의해야했습니다. 이렇게하면 데이터에 액세스 할 수있어서 ORM (즉, 사용자 및 프로필에 저장된 관계)에 적절한 관계를 저장할 수있었습니다. 어쨌든 고마워! – codepringle

관련 문제