Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用模型中的其他字段初始化Django模型中的字段_Python_Django_Model - Fatal编程技术网

Python 如何使用模型中的其他字段初始化Django模型中的字段

Python 如何使用模型中的其他字段初始化Django模型中的字段,python,django,model,Python,Django,Model,我想调用一个API,它将从作为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="")

我想调用一个API,它将从作为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)

因此,当创建一个护士对象时,我想调用一个api(postcode.io),这意味着我能够根据将这些值保存到数据模型的邮政编码获取纬度和经度。我需要有纬度和经度,因为我需要在模板中使用它来访问此信息


谢谢

您可以通过定义来实现这一点

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
如果要更改,可以在save()中执行;如果只发生一次,则可以在init中执行

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)

我发现最好的方法是使用@jamesbond的方法,原因如下

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)
我只是一个好的开发人员,但这里是我的理由,以防这可以帮助你

这种方法意味着,每次我通过表单更新护士对象,即更改,或者当我最初添加护士的新实例时,它都会自动完成所需的字段,这非常好。然而,我可以看到,这可能是不好的,因为它在每次我更新实例时调用api,这可能会导致错误,但对于我的使用,这是一个很好的解决方案


我希望这有帮助:)

谢谢,保存的就是我想要的!非常有用,谢谢