首页 > 解决方案 > 尝试从函数返回语句创建属性

问题描述

我认为我缺乏对范围的理解。在我的“商店”模型中,我有一个功能可以将address字段转换为纬度和经度。我想获取我返回的两个值并使用它们为我的“商店”模型创建latitudelongitude属性。我的目标是在我的模板中使用它们,{{store.latitude}}例如{{store.longitude}}

class Store(models.Model):
    name = models.CharField(max_length=100)
    address = models.CharField(max_length=255)

    def get_coords(self):
        geolocator = Nominatim()
        location = geolocator.geocode(self.address)
        latitude = location.latitude
        longitude = location.longitude
        return latitude, longitude

    latitude = ...
    longitude = ...

    class Meta:
        verbose_name_plural = "Store"

    def __str__(self):
        return self.name

新模式

class Store(models.Model):
    name = models.CharField(max_length=100)
    address = models.CharField(max_length=255)
    latitude = models.CharField(max_length=255)
    longitude = models.CharField(max_length=255)

    class Meta:
        verbose_name_plural = "Store"

    def __str__(self):
        return self.name

    def update_coordinates(self):
        geolocator = Nominatim()
        location = geolocator.geocode(self.address)
        self.latitude = location.latitude
        self.longitude = location.longitude
        self.save(update_fields=["latitude", "longitude"])

标签: pythondjangodjango-models

解决方案


models.py使用此代码块更改您的。然后您可以将商店实例传递给模板。您可以返回这些值并将它们静态传递给模板,但这在将来使用会更安全,因为这会在调用 save 方法时更新数据库。

    class Store(models.Model):
        name = models.CharField(max_length=100)
        address = models.CharField(max_length=255)
        latitude = models.CharField(max_length=255)
        longitude = models.CharField(max_length=255)

        class Meta:
            verbose_name_plural = "Stores"

        def __str__(self):
            return self.name

        def update_coordinates(self):
            geolocator = Nominatim()
            location = geolocator.geocode(self.address)
            self.latitude = location.latitude
            self.longitude = location.longitude
            self.save(update_fields=["latitude", "longitude"])

推荐阅读