Я не совсем уверен в вашей цели, но если вы просто хотите включить некоторые данные, основанные на том, что у вас есть в вашем текущем сериализаторе, вы можете попробовать это
class UserSensorDeviceWithParamSerializer(serializers.ModelSerializer):
user_gps = serializers.SerializerMethodField()
def get_user_gps(self, obj):
# you can do this
return UserGPSFeed.objects.filter(user_id=obj.user_id)
# OR if you prefer
return UserGPSFeed.objects.filter(user=obj.user)
# both are the same but using user_id may give a slightly faster performance
class Meta:
model = models.UserSensorDevice
fields = '__all__'
read_only_fields = ['id','created_at']
Обратите внимание, что user_id
имя столбца, созданного в вашей модели при указании внешнего ключа, поскольку он содержит идентификатор для записанного, он указывает на
Обновление : в отношении ошибки Object of type UserGPSFeed is not JSON serializable
это означает, что django не удалось проанализировать результат до json автоматически, потому что это не экземпляр модели, а набор запросов - извините, я забыл обработать это - поэтому для этого нам нужно использовать сериализатор, чтобы сериализовать каждый объект в возвращенном наборе запросов.
К счастью, вы уже создали этот сериализатор, поэтому нам нужно только передать ему возвращенный набор запросов, поэтому мы обновляем get_user_gps()
, чтобы он был таким,
def get_user_gps(self, obj):
user_gps_queryset = UserGPSFeed.objects.filter(user_id=obj.user_id)
user_gps_serializer = UserGPSFeedSerializer(user_gps_queryset, many=True)
return user_gps_serializer.data
Первый пример все еще действителен, конечно если он вернет один объект