2017-10-07 4 views
0

Je souhaite créer un sérialiseur qui utilise les variables de mon modèle et qui comptabilise également le nombre de données du même identifiant dans la table.Comment utiliser les variables personnalisées dans les sérialiseurs?

J'ai créé cela, mais il ne fonctionne pas:

class WebsiteSerializer(serializers.Serializer): 
    item_nr = serializers.IntegerField() 

    class Meta: 
     model = URL 
     fields = (
      "id", 
      "item", 
      "status", 
      "item_nr " 
     ) 

    def get_item_nr (self, obj): 
     obj.item_nr = Items.objects.filter(item_id=self.context.get(id)).count() 
     return obj.item_nr 

C'est l'erreur que je reçois:

Got AttributeError lors d'une tentative d'obtenir une valeur pour le champ item_nr sur sérialiseur WebsiteSerializer. Le champ du sérialiseur peut être incorrectement nommé et ne correspondre à aucun attribut ou clé sur l'instance URL. Le texte d'exception original était: L'objet 'URL' n'a pas d'attribut 'item_nr'.

+0

Quelle est l'erreur que vous obtenez? –

+0

Veuillez fournir la définition des modèles pour plus de contexte. Merci. – mariodev

+0

Il y a un espace dans "item_nr". –

Répondre

1

items_nr sera un SerializerMethodField pas IntegerField Le champ sera attribué automatiquement le type de données en fonction de ce que vous revenez dans get_item_nr.

class WebsiteSerializer(serializers.Serializer): 
    item_nr = serializers.SerializerMethodField() 

    class Meta: 
     model = URL 
     fields = (
      "id", 
      "item", 
      "status", 
      "item_nr " 
     ) 

    def get_item_nr (self, obj): 
     obj.item_nr = Items.objects.filter(item_id=self.context.get(id)).count() 
     return obj.item_nr 
+0

@ottomd Si la solution vous convient, veuillez la confirmer et accepter la réponse. –