Je voudrais appeler une API qui renverra la latitude et la longitude à partir d'un code postal qui fait partie de mon modèle Django
class Nurse(models.Model): firstName = models.CharField(max_length=100, default="") lastName = models.CharField(max_length=100, default="") postCode = models.CharField(max_length=10, default="") area = models.CharField(max_length=100) phoneNumber = models.CharField(max_length=20) email = models.EmailField(max_length=100, null=True) latitude = models.FloatField(max_length=10, null=True) longitude = models.FloatField(max_length=10, null=True)
Donc, quand un objet infirmière est créé, je voudrais appeler une api (postcode.io), ce qui signifie que je peux obtenir une latitude et une longitude en fonction du code postal qui enregistre ces valeurs dans le modèle de données. J'ai besoin d'avoir la latitude et la longitude car je l'ai utilisée dans un modèle où j'ai besoin d'accéder à ces informations.
Merci!
3 Réponses :
Vous pouvez y parvenir en définissant le modèle méthodes .
class Nurse(models.Model): firstName = models.CharField(max_length=100, default="") lastName = models.CharField(max_length=100, default="") postCode = models.CharField(max_length=10, default="") area = models.CharField(max_length=100) phoneNumber = models.CharField(max_length=20) email = models.EmailField(max_length=100, null=True) latitude = models.FloatField(max_length=10, null=True) longitude = models.FloatField(max_length=10, null=True) def latitude(self): # here you can access the postCode of this model object using self.postCode def longitude(self): # same can be done here
Vous pouvez le faire dans save () si cela change ou init () si cela est censé ne se produire qu'une seule fois.
class Nurse(models.Model): #Variant 1 def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.longitude, self.lattitude = shadyAPI.giveAwayStrangersPersonalData(self.email, self.firstname, self.lastname, self.postcode, self.area, self.phoneNumber, get_user_model().objects.get(nursePK=self).password) #Variant 2 def save(self, *args, **kwargs): self.longitude, self.lattitude = shadyAPI.giveAwayStrangersPersonalData(self.email, self.firstname, self.lastname, self.postcode, self.area, self.phoneNumber, get_user_model().objects.get(nursePK=self).password) super().save(self, *args, **kwargs)
Merci, la sauvegarde est celle que je voulais! Merci très utile
Le meilleur moyen que j'ai trouvé est d'utiliser la méthode de @James Bond pour la raison suivante.
class Nurse(models.Model): def save(self, *args, **kwargs): self.longitude, self.lattitude = shadyAPI.giveAwayStrangersPersonalData(self.email, self.firstname, self.lastname, self.postcode, self.area, self.phoneNumber, get_user_model().objects.get(nursePK=self).password) super().save(self, *args, **kwargs)
Je ne suis qu'un bon développeur, mais voici ma raison au cas où cela pourrait vous aider.
/ p>
Cette méthode signifie que chaque fois que je mets à jour l'objet infirmière ie. Changement via un formulaire ou lorsque j'ajoute initialement une nouvelle instance d'infirmière, elle remplira automatiquement les champs obligatoires, ce qui est génial. Je peux voir cependant que cela pourrait être mauvais car il appelle l'API à chaque fois que je mets à jour l'instance, ce qui pourrait entraîner des erreurs, mais pour mon utilisation, c'est bien et une excellente solution.
J'espère que cela aide: )