我在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
无济于事 .
我错过了一些东西,甚至可能都错了吗?
谢谢!
1 回答
知道了,多亏了这个答案:
https://stackoverflow.com/a/17263583/1366989
这里缺少的元素是
EventSerializer
上的source
kwarg . 所以,它现在看起来像这样,并按预期工作: