Django rest framework - фильтрация для поля сериализатора
У меня есть вопрос о Django REST-полной структуре.
Когда продукты передаются удаленному клиенту, каждый продукт берет файл с отфильтрованными данными.
Например, модель может быть такой.
class Product(models.Model):
name = models.CharField()
class Like(models.Model):
product = models.ForeignKey(Product, related_name="likes")
На клиенте каждый нравится продукта, считанного с истинным значением, а не false.
Итак, я попробовал с кодом ниже в сериализаторе.
class ProductSerializer(serializers.ModelSerializer):
likes = serializers.PrimaryKeyRelatedField(many=True, queryset=Like.objects.filter(whether_like=True))
class Meta:
model = Product
fields = ('id', 'name', 'likes')
Но это не работает, как я хотел.
Что мне делать?
Ниже приведен дополнительный код просмотра.
@api_view(['GET'])
def product_list(request, user_id, format=None):
if request.method == 'GET':
products = Product.objects.all()
serializer = ProductSerializer(products, many=True)
return Response(serializer.data)
Ответы
Ответ 1
Как насчет чего-то вроде этого:
class ProductSerializer(serializers.ModelSerializer):
likes = serializers.SerializerMethodField('get_likes')
def get_likes(self, product):
qs = Like.objects.filter(whether_like=True, product=product)
serializer = LikeSerializer(instance=qs, many=True)
return serializer.data
class Meta:
model = Product
fields = ('id', 'name', 'likes')
** LikeSerializer
опущен для краткости. Надеюсь это поможет.