Repos Cadre Sérialiseur Méthode
J'ai le texte suivant Sérialiseur à l'aide de la Django REPOS Cadre.
C'est ce que j'ai jusqu'à présent...
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'),
Il existe quelques problèmes avec cet extrait de code.
1) de La pram pk=19 est codé en dur elle devrait être self.kwargs['profile_id'].
j'ai essayé et essayé, mais je ne sais pas comment passer kwarg dans la méthode et ne peuvent pas obtenir profile_id de travail. c'est à dire je ne peux pas obtenir à partir de l'url.
2) si ce code dans les modèles? J'ai essayé d'ajouter les modèles, mais encore une fois peut passer le args.
models.py
c'est à dire la méthode de la 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)
OriginalL'auteur jason | 2013-02-17
Vous devez vous connecter pour publier un commentaire.
Sérialiseurs sont passés à un contexte dictionnaire, qui contient l'instance de vue, de sorte que vous pourriez obtenir de l'profile_id en faisant quelque chose comme ceci:
Toutefois, dans ce cas, je ne pense pas que vous devez faire en tant que 'obj', dans tous les cas être mis à l'instance d'un profil.
Et oui, vous pourriez mettre le 'get_this_score' méthode de la classe du modèle à la place. Vous auriez encore besoin de la 'SerializerMethodField", mais il serait tout simplement appeler " retour obj.get_this_score (...)", en exposant les arguments de la sérialiseur contexte.
Noter que le sérialiseur contexte comprendront également une "demande", de sorte que vous pouvez également accéder à la demande.l'utilisateur' si nécessaire.
Im rejoindre à la question de @jason
dans
However in this case I don't think you need to do that as 'obj' will in any case be set to the profile instance
voulez-vous direProduct
exemple peut-être?OriginalL'auteur Tom Christie
Pour répondre à jason la question de la réponse à la de Tom de réponse, vous pouvez accéder à la demande de l'objet via le même mécanisme de contexte comme si. Vous faites référence à la demande des objets de la ModelMethod définition, vous ne passez pas d'eux. J'ai été en mesure de l'utiliser pour accéder à la demande actuelle.objet utilisateur comme ci-dessous:
Quand j'utilise cette sérialiseur avec CBV sa fonctionne bien mais lorsque j'ai utilisé ce sérialiseur avec le pédalier FBV
return Response({'data':ProductSerializer(user_profiles,many=True).data})
je suis keyerror demanderésolu par , y compris extra context
OriginalL'auteur Emeka