장고 휴식 프레임 워크를 사용하고 있는데 GenericRelation
을 직렬화하려고합니다. 내 모델에서장고의 GenericRelation을 직렬화하는 방법
, 나는이 : 나는 이름과 자산 ID를 반환합니다 내 프로젝트에 대한 직렬화를 작성하려고 해요
class Asset(model.Models):
name = models.CharField(max_length=40)
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type','object_id')
class Project(models.Model):
name = models.CharField(max_length=40)
file = generic.GenericRelation(Asset)
. 나는이 있습니다
class AssetObjectRelatedField(serializers.RelatedField):
def to_native(self, value):
if isinstance(value, Project):
serializer = Project(value)
else:
raise Exception('Unexpected type of asset object')
return serializer.data
class ProjectSerializer(serializers.HyperlinkedModelSerializer):
file = AssetObjectRelatedField()
class Meta:
model = Project
fields = ('name','file')
내가 프로젝트에 액세스하려고 할 때 내가 얻을 : 자산 개체
내가 무엇을 누락 어떤 아이디어의
예기치 않은 유형?
업데이트 : 제대로 작동합니다. 그러나 내가 읽은 문서에 맞지 않는 것 같습니다. 대답은 자산 유형으로
AssetObjectRelatedField
에 전달 된 값을 처리하는 것입니다. 이는 문서화 된 here과 다른 점입니다.다음과 같이 작동합니다.
class AssetObjectRelatedField(serializers.RelatedField): def to_native(self, value): return value.id
당신이 데프 to_native에 .. – mariodev
가 디버깅을 수행하십시오 전체 스택 트레이스를 넣을 수, 인쇄 유형 (값)은 자산 클래스임을 보여줍니다. 그것은 예상치 못한 것입니다 –