나는 django의 휴식 프레임 워크를 사용하여 사용자에 대한 정보를 표시하고 있습니다. 모든 사용자는 UserProfile에 저장된 연락처가 있습니다 (사용자 프로필은 일대일 관계를 사용하여 사용합니다). 연락처는 사용자 모델 (user.contacts
)에서 직접 액세스 할 수 있습니다.
사용자의 모든 연락처에 대한 이름 (및 URL)을 표시하려고합니다. 나는 다음과 같은 시리얼을 썼다 :Django Rest Framework - 중첩 된 사용자의 사용자 프로필
{
"url": "http:\/\/localhost:8080\/users\/1\/",
"username": "test1",
"email": "",
"contacts": [
{
"user": 2
},
{
"user": 1
}
]
}
를 반환하지만이 원하는
class ContactsUserSerializer(serializers.ModelSerializer):
class Meta:
model = get_user_model()
fields = ("username", "email")
class ContactsSerializer(serializers.ModelSerializer):
# user = ContactsUserSerializer(many=True) # raises TypeError: 'User' object is not iterable
class Meta:
model = UserProfile
fields = ("user",)
class UserSerializer(serializers.HyperlinkedModelSerializer):
contacts = ContactsSerializer(many=True)
class Meta:
model = get_user_model()
fields = ("url", "username", "email", "contacts")
:
{
"url": "http:\/\/localhost:8080\/users\/1\/",
"username": "test1",
"email": "",
"contacts": [
{
"url": "http://link_to_user",
"username": "foo"
},
{
"url": "http://link_to_user",
"username": "bar"
}
]
}
가 어떻게 그것을 달성 할 수 있는가? 연락처 사용자에 대한 다른 serializer를 이미 추가하려고 시도했지만 유형 오류가 발생했습니다. 'User'객체가 반복 가능하지 않으며 JSON 구조가 약간 어색 해 보일 것입니다. {contacts : [user : { "username": ... },]}, 장고 사용자 프로필에 자신이 없다면 API 사용자를 혼동시킬 수 있습니다.
완벽하게 작동하지만'HyperlinkedModelSerializer' 대신'HyperlinkedRelatedField' (또는'HyperlinkedIdentityField') 여야합니다! – Matt3o12