Ich habe den folgenden Serializer mit der Django REST Framework.Rest Framework Serializer-Methode
Das ist, was ich bisher haben ...
serializer.py
class ProductSerializer(serializers.ModelSerializer):
score = serializers.SerializerMethodField('get_this_score')
class Meta:
model = Product
fields = ('id', 'title', 'active', 'score')
def get_this_score(self, obj):
profile = Profile.objects.get(pk=19)
score = [val for val in obj.attribute_answers.all() if val in profile.attribute_answers.all()]
return (len(score))
urls.py
url(r'^products/(?P<profile_id>.+)/$', ProductListScore.as_view(), name='product-list-score'),
Es gibt ein paar Probleme mit diesem Code-Schnipsel von Code.
1) Der Kinderwagen pk = 19 ist hardcoded sollte es self.kwargs['profile_id'].
sein Ich habe versucht und versucht, aber ich weiß nicht, wie man Kwarg in die Methode übergeben und profil_id nicht funktionieren kann. d. h. ich kann es nicht von der URL abrufen.
2) Sollte dieser Code in Modellen enthalten sein? Ich habe versucht, zu Modellen hinzuzufügen, aber wieder kann die Argumente übergeben.
models.py dh Methode Klasse
def get_score(self, profile):
score = [val for val in self.attribute_answers.all() if val in
profile.attribute_answers.all()]
return len(score)
Ich mag die Idee, dies in den Modellen zu haben. aber SerializerMethodField mit source = erlaubt mir nicht, die parms zu übergeben. Könnten Sie mir ein Beispiel für die Verwendung eines SerializerMethodFields geben und Anforderungsargumente sowie das Objekt an eine Modellmethode übergeben? das würde mir wirklich helfen zu verstehen. Danke. – jason
Im Beitritt zu der Frage von @jason –
in 'Aber in diesem Fall glaube ich nicht, dass Sie tun müssen, da 'obj' in jedem Fall auf die Profilinstanz gesetzt werden soll" meinst du 'Produkt' Beispiel vielleicht? – Pynchia