DRF - 嵌套序列化通过模型的m2m字段
问题描述:
我在DRF中使用带有贯穿模型的m2m字段。一切工作正常,除了当我尝试嵌套会员串行器。DRF - 嵌套序列化通过模型的m2m字段
models.py
class SweepStakes(models.Model):
name = models.CharField(max_length=255)
class Event(models.Model):
sweepstakes = models.ManyToManyField(SweepStakes, through='EventSweepStakesMembership')
class EventSweepStakesMembership(models.Model):
event = models.ForeignKey(Event, on_delete=models.CASCADE)
sweepstakes = models.ForeignKey(SweepStakes, on_delete=models.CASCADE)
enabled = models.BooleanField(default=False)
serializers.py
class EventSweepStakesSerializer(serializers.ModelSerializer):
name = serializers.ReadOnlyField(source='sweepstakes.name')
class Meta:
model = EventSweepStakesMembership
fields = ('name', 'enabled',)
class EventSerializer(BaseTenantSerializer):
sweepstakes = EventSweepStakesSerializer(many=True, read_only=True)
class Meta:
model = Event
fields = ('sweepstakes',)
在这一点上,如果我勾EventSweepStakesMembership
模型和EventSweepStakesSerializer
到一个视图,我回来正是我期望的那样,输出是这样的:
{"name": "thingy", "enabled" true}
但是,当我钩Event
模型和EventSerializer
串行到视图中,sweepstakes
字段返回一个空的字典,而不是嵌套表示,如下所示:
{"sweepstakes": [{}]}
注意,这不是一个空数组,换句话说它看到通过相关模型,但只是在显示时无法正确序列化它。
没有错误,它只是空的。我试图增加Event
串行器的depth
无济于事。
我是否错过了一些东西,或者甚至可能会发生这种错误?
谢谢!
答
明白了,多亏了这样的回答:
https://*.com/a/17263583/1366989
这里缺少的元素是source
kwarg上EventSerializer
。因此,它现在看起来像这样,并且按预期工作:
class EventSerializer(BaseTenantSerializer):
sweepstakes = EventSweepStakesSerializer(
source='eventsweepstakesmembership_set', many=True, read_only=True
)