2015-02-03 22 views
15

Tôi có câu hỏi về khung công tác đầy đủ của Django REST.Django rest framework - lọc cho trường serializer

Khi sản phẩm đã hiển thị ở ứng dụng khách ở xa, mỗi sản phẩm sẽ được lưu trữ với dữ liệu được lọc.

Ví dụ: mô hình có thể giống như thế này.

class Product(models.Model): 
     name = models.CharField() 

class Like(models.Model): 
     product = models.ForeignKey(Product, related_name="likes") 

Trên client, mỗi thích của sản phẩm tính với giá trị thực sự, không sai.

Vì vậy, tôi đã thử với mã bên dưới trong bộ nối tiếp.

class ProductSerializer(serializers.ModelSerializer): 

    likes = serializers.PrimaryKeyRelatedField(many=True, queryset=Like.objects.filter(whether_like=True)) 

    class Meta: 
     model = Product 
     fields = ('id', 'name', 'likes') 

Nhưng, điều đó không hoạt động như tôi muốn.

Tôi nên làm gì?

Sau đây là mã xem bổ sung.

@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) 

Trả lời

29

Làm thế nào về một cái gì đó như thế này:

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 bỏ qua cho ngắn gọn. Hi vọng điêu nay co ich.

+0

Và .. nơi tôi có thể thấy tham chiếu bổ sung cho điều này? –

+0

http://www.django-rest-framework.org/api-guide/fields/#serializermethodfield – mishbah

+0

Bạn đã giúp đỡ rất nhiều. Cảm ơn bạn!! –

Các vấn đề liên quan