我在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 成功返回驱动程序的用户名和旅客。
现在 - 对于骑行字段,我想获得整个骑行对象,而不仅仅是一个字段(如乘客和司机中)。
怎么做?
答案 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
来实现它。