2015-02-03 21 views
15

Ich habe eine Frage über Django REST-Full Framework.Django Rest Framework - Filterung für Serializer Feld

Wenn Produkte zum Remote-Client gerendert wurden, wird für jedes Produkt ein Feld mit gefilterten Daten verwendet.

Zum Beispiel kann Modell so sein.

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

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

auf dem Client jede mag Produkt mit wahren Wert gezählt, nicht falsch.

Also habe ich mit unten Code im Serializer versucht.

class ProductSerializer(serializers.ModelSerializer): 

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

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

Aber das funktioniert nicht, wie ich wollte.

Was soll ich tun?

Das Folgende ist ein zusätzlicher Ansichtscode.

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

Antwort

29

Wie wäre es etwa so:

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 der Kürze halber weggelassen. Hoffe das hilft.

+0

Und .. wo kann ich eine zusätzliche Referenz dafür sehen? –

+0

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

+0

Sie waren eine große Hilfe. Vielen Dank!! –

Verwandte Themen