0
votes

Tapez l'erreur lors de la demande Django Cadre de repos

Je construis une application Django où il y a un modèle appelé emplacement et un autre modèle appelé propriété. Chaque fois que j'essaie de donner une demande de vente, cela me montre une erreur d'erreur typeError: objet de type emplacement n'est pas json Serializable code>

Mon modèle P>

{
'name': 'foo bar',
'bedrooms':1,
'bathrooms':2,
'living_rooms':2,
'location':1,
}


2 commentaires

Je crois en votre sérialisateur de propriétés, vous devez ajouter un attribut LocalKeyrelatedfield-Like emplacement = Primarykeyrelatedfield () ou emplacement = locationerializer ()


Alors, comment décidez-vous quelle propriété vous modifiez dans la demande de vente? Vous fournissez la demande.user au lieu de l'instance de la propriété à modifier


4 Réponses :


1
votes

Dans votre PropertySerializer Code> Vous devez soit ajouter un primairekeyrelatefield locationerializer code> à l'attribut "Emplacement":

class PropertySerializer(serializers.ModelSerializer):
     location = LocationSerializer()
     class Meta:
          model = Property
          fields = ['id','name','bedrooms','bathrooms','living_rooms','location']
          read_only_fields = ['id']


1 commentaires

Mon modèle de localisation est un modèle indépendant, il a une relation avec plus d'un modèle, comme. Propriété - Localisation, agence - emplacement, propriétaire - emplacement. J'ai créé un modèle d'emplacement comme celui-ci pour économiser de l'espace.



0
votes

Dans votre méthode de vente ( Mettez (auto, demande) ), vous utilisez demande.User comme objet de PropertySerializer plutôt qu'à un objet de propriété. Vous pouvez vérifier La documentation Serializer pour enregistrer un objet .

Vous pouvez suivre Ce magnifique didacticiel DRF Pour configurer vos APIViews et URLS.PY pour obtenir / mettre / post méthodes.

Ensuite, vous pouvez créer, mettre à jour et obtenir un objet sans problèmes.


0 commentaires

1
votes

Il y a beaucoup de problèmes avec votre code. Les demandes d'obtention et de poste travaillent correctement sur le point de terminaison de la liste, mais la demande de vente doit fonctionner sur le point de terminaison détaillé. Cela signifie que le noeud final devrait vous permettre de spécifier l'objet de la propriété que vous souhaitez modifier, mais actuellement, ce n'est pas le cas. Couplé avec ceci, au lieu de passer l'instance de la propriété que vous souhaitez modifier sur le sérieliseur, vous passez la requête .User .

généralement, si vous utilisez habituellement L'APIVVoir de bas niveau, puis vous devez faire des vues séparées pour la liste et les points de terminaison de détail. Si vous souhaitez utiliser une vue, vous devez exploiter les vues de vue de niveau supérieur qui combinent la liste et les vues de détail. Et ils sont assez faciles à mettre en œuvre car la plupart du code de la chaudière sont déjà implémentés pour vous. Pour votre cas, un classement simple comme celui-ci peut suffire. xxx

puis enregistrez-le dans les urls.py comme ceci: xxx

Il a déjà déjà eu le get, la publication, la mise en œuvre et la suppression mise en œuvre et incarne deux points de terminaison: API / Propriétés appelé Point de terminaison de liste et API / Propriétés / / - appelé le point d'extrémité détail.

Donc pour éditer la propriété de Say, la propriété avec ID 2, vous devez envoyer la demande de vente à API / Propriétés / 2 / . / p>

Vous pouvez également en savoir plus sur Vues de vues DRF


2 commentaires

C'était en premier lorsque j'ai écrit cette application, plus tard, j'ai fait la même chose que vous avez dit. Mais toujours, il me donnait le même problème. Ensuite, j'ai pu le résoudre. J'ai oublié de donner au sérialisateur une instance qui est pourquoi elle causait le problème


@Khanasfirezapranto bon alors. Si cela aidait à résoudre le problème, n'oubliez pas d'accepter la réponse



0
votes

J'ai découvert le problème et j'ai résolu cela dans cette affaire Le sérialisateur et les modèles sont les mêmes mais j'ai changé la vue. XXX


0 commentaires