有一些示例如何创建可写的嵌套序列化程序,如这个,然后如何序列化通用外键(在这里)。
但是我找不到如何同时做到这两点,即如何为通用外键字段创建一个嵌套可写序列化程序。
在我的模型中,有一个 Meeting
模型和一个 GenericForeignKey
,可以是 DailyMeeting
或 WeeklyMeeting
,例如:
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
然后我在我的serializers.py
中创建了一个自定义字段:
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__'
我正在传递一个看起来像这样的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"
}
}
但问题是我遇到了以下错误:
为什么关系字段必须是断言错误:关系字段必须提供一个
queryset
参数,覆盖get_queryset
或设置read_only=True
。
read_only
?如果我将其设置为read_only
,那么它将不会在序列化器的data
中传递。我需要提供什么类型的查询集?
read_only
。 - Jay Dave