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  
    )