3
Django-Rest-Framework에서 GenericRelations를 사용하는 방법을 배우려고합니다. serializer relations에 대한 문서화 페이지를 발견하고 코드를 따랐습니다. TaggedItemSerializer 안에 지금django-rest-framework에서 일반 관계 직렬화
class BookmarkSerializer(serializers.ModelSerializer):
class Meta:
model = Bookmark
fields = ('url', 'link_url',)
class NoteSerializer(serializers.ModelSerializer):
class Meta:
model = Note
fields = ('url', 'text',)
class TaggedObjectRelatedField(serializers.RelatedField):
"""
A custom field to use for the 'tagged_object' generic relationship
"""
def to_representation(self, value):
"""
Serialize tagged objects to their respective serializer formats
:param value:
:return:
serializer.data
"""
if isinstance(value, Bookmark):
return 'Bookmark: ' + value.url
elif isinstance(value, Note):
return 'Note: ' + value.text
raise Exception('Unexpected type of tagged object')
class TaggedItemSerializer(serializers.ModelSerializer):
tagged_object = TaggedObjectRelatedField()
class Meta:
model = TaggedItem
fields = ('url', 'id', 'tag_name', 'tagged_object')
무엇을 TaggedObjectRelatedField (에 입력해야한다) :
class TaggedItem(models.Model):
"""
Tags arbitary model instance using a generic relation.
"""
tag_name = models.SlugField()
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
tagged_object = GenericForeignKey('content_type', 'object_id')
def __unicode__(self):
return self.tag_name
class Bookmark(models.Model):
"""
A bookmark consists of a URL, and 0 or more descriptive tags.
"""
link_url = models.URLField()
tags = GenericRelation(TaggedItem)
class Note(models.Model):
"""
A note consists of some texts, and 0 or more descriptive tags
"""
text = models.CharField(max_length=1000)
tags = GenericRelation(TaggedItem)
내가 시리얼을 만들어 : 나는 모델을 만들어? 현재 내가
File "/home/aswin/Documents/WebProjects/drf_practice/uni_auth//loginpage/login/serializers.py", line 76, in TaggedItemSerializer
tagged_object = TaggedObjectRelatedField()
File "/home/aswin/Documents/WebProjects/drf_practice/uni_auth/lib/python3.5/site-packages/rest_framework/relations.py", line 80, in __init__
'Relational field must provide a `queryset` argument, '
AssertionError: Relational field must provide a `queryset` argument, override `get_queryset`, or set read_only=`True`.
으로 오류를 얻고있다 너무 READ_ONLY = 진정한로 인수를주는 시도했지만 내가 정확히 무슨 짓을 넣어 같은 error.just을 던졌다 :
class TaggedItemSerializer(serializers.ModelSerializer):
tagged_object = TaggedObjectRelatedField(read_only=True)
도와주세요 나와 함께이
이 코드는 확실히 DRF 워드 프로세서에서 누락되었습니다
여기 내 시리얼 클래스입니다. 일을 훨씬 더 분명하게 만들 것입니다. – cbo
하지만 왜 'TaggedItem을 직렬화하고 싶지 않습니까?' 제네릭 모델을 직렬화하는 것은 완전히 유효한 접근이라고 생각합니다. 어떻게이 일을 할 수 있겠습니까? – cbo