Ho il seguente serializzatore che utilizza Django REST Framework.Rest Framework Serializer Method
Questo è ciò che ho finora ...
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'),
Ci sono alcuni problemi con questo frammento di codice.
1) La carrozzina pk = 19 è hardcoded dovrebbe essere self.kwargs['profile_id'].
Ho provato e provato, ma non so come passare kwarg nel metodo e non può ottenere profile_id per funzionare. Ad esempio, non riesco a ottenerlo dall'URL.
2) Qualcuno di questo codice dovrebbe essere nei modelli? Ho provato ad aggiungere ai modelli, ma ancora una volta posso passare gli arg.
models.py cioè metodo di classe
def get_score(self, profile):
score = [val for val in self.attribute_answers.all() if val in
profile.attribute_answers.all()]
return len(score)
Mi piace l'idea di avere questo nei modelli. ma SerializerMethodField usando source = non mi permette di passare i parms. potresti darmi un esempio dell'uso di SerializerMethodField e del passaggio degli argomenti di richiesta più l'oggetto a un metodo di modello? questo mi aiuterebbe davvero a capire. Grazie. – jason
Mi unisco alla domanda di @jason –
in 'Tuttavia in questo caso non penso che sia necessario farlo poiché 'obj' sarà in ogni caso impostato sull'istanza del profilo 'vuoi dire istanza' Product' forse? – Pynchia