Django - SlugRelated返回完整对象

时间:2015-11-07 15:15:37

标签: python serialization django-models django-rest-framework

我在DRF工作,并且有一个序列化程序,如下所示:

class PendingRequestSerializer(serializers.ModelSerializer):

    driver = serializers.SlugRelatedField(
        slug_field='username',
        queryset=User.objects.all()
    )

    passenger = serializers.SlugRelatedField(
        slug_field='username',
        queryset=User.objects.all()
    )

    class Meta:
        model = PendingRequest
        fields = ('passenger', 'driver', 'ride', )
        read_only_fields = ('passenger', ) 

型号:

class PendingRequest(models.Model):
    driver = models.ForeignKey('auth.User', related_name='driver_pending_requests')
    passenger = models.ForeignKey('auth.User', related_name='passenger_pending_requests')
    ride = models.ForeignKey(Ride)

我可以使用 SlugRelatedField 成功返回驱动程序用户名旅客

现在 - 对于骑行字段,我想获得整个骑行对象,而不仅仅是一个字段(如乘客和司机中)。

怎么做?

1 个答案:

答案 0 :(得分:0)

您可以使用嵌套序列化。

DRF提供了一项名为nested serializers的功能。

对于您的示例,您可以执行以下操作:

class PendingRequestSerializer(serializers.ModelSerializer):

    driver = serializers.SlugRelatedField(
        slug_field='username',
        queryset=User.objects.all()
    )

    passenger = serializers.SlugRelatedField(
        slug_field='username',
        queryset=User.objects.all()
    )

    ride = RideSerializer()

    class Meta:
        model = PendingRequest
        fields = ('passenger', 'driver', 'ride', )
        read_only_fields = ('passenger', ) 

这将产生正常的JSON,而不是在骑行场中显示骑乘实例的PK,它将嵌套整个骑乘物体。 你当然需要写RideSerializer来实现它。