this과 같은 쓰기 가능한 중첩 serializer를 만드는 방법과 일반 외래 키 (here)를 직렬화하는 방법에 대한 예제가 있습니다.Django Rest Framework : 일반 외래 키를 사용하여 쓰기 가능한 중첩 serializer
하지만 동시에 둘 다 수행하는 방법, 즉 일반 외래 키 필드에 대해 중첩 된 쓰기 가능한 직렬기를 만드는 방법을 찾을 수 없습니다.
class RecurringMeetingRelatedField(serializers.RelatedField):
def to_representation(self, value):
if isinstance(value, DailyMeeting):
serializer = DailyMeetingSerializer(value)
elif isinstance(value, WeeklyMeeting):
serializer = WeeklyMeetingSerializer(value)
else:
raise Exception('Unexpected type of tagged object')
return serializer.data
class MeetingSerializer(serializers.ModelSerializer):
recurring_meeting = RecurringMeetingRelatedField()
class Meta:
model = Meeting
fields = '__all__'
내가 : 내 serializers.py
에서 사용자 정의 필드를 만든 다음
class Meeting(models.Model):
# More fields above
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
recurring_meeting = GenericForeignKey('content_type', 'object_id')
class DailyMeeting(models.Model):
meeting = GenericRelation(Meeting)
# more fields
class WeeklyMeeting(models.Model):
meeting = GenericRelation(Meeting)
# more fields
: 내 모델에서
중 하나 DailyMeeting
또는 WeeklyMeeting
처럼 될 수있는 GenericForeignKey
와 Meeting
모델이 다음과 같은 JSON을 전달합니다.
{
"start_time": "2017-11-27T18:50:00",
"end_time": "2017-11-27T21:30:00",
"subject": "Test now",
"moderators": [41],
"recurring_meeting":{
"interval":"daily",
"repetitions": 10,
"weekdays_only": "True"
}
}
(210)
그러나 문제는 나는 다음과 같은 오류가 발생하고 있다는 것입니다 :
AssertionError: Relational field must provide a
queryset
argument, overrideget_queryset
, or set read_only=True
.
왜 관계형 필드 read_only
를이어야 하는가? 내가 read_only
으로 설정하면 시리얼 화기의 data
으로 전달되지 않습니다.
어떤 종류의 쿼리 세트를 제공해야합니까?
내가 시나리오를 확인하지 않은하지만 당신은 API를 ..에서 recurring_meeting을 통과 필요 없다 (그 시리얼 라이저() 메소드를 만들 추가) 그래서 당신은 설정할 수 있습니다''' –
을 당신이 경우 read_only''' ''read_only''로 설정하면''create()''메소드에 전달 된''validated_data''에 아무것도 없습니다. 따라서이 경우 recurring_meeting은 완전히 무시됩니다. – Galil