【发布时间】:2018-10-30 06:36:12
【问题描述】:
当我尝试为以下模型进行迁移时:
class Location(models.Model):
name = models.CharField(max_length=200)
latitude = models.FloatField
longitude = models.FloatField
altitude = models.IntegerField
def _str_(self):
return self.name
def getLatitude(self):
return self.latitude
def getLongitude(self):
return self.longitude
class Distance(models.Model):
placeA = models.ForeignKey(Location, on_delete=models.CASCADE)
placeB = models.ForeignKey(Location, on_delete=models.CASCADE)
placeAlatitude = placeA.getLatitude()
placeBlatitude = placeB.getLatitude()
placeAlongitude = Location.objects.select_related().get(placeA.longitude)
placeBlongitude = Location.objects.select_related().get(placeB.longitude)
distance = models.FloatField(default = 0.0)
我收到错误:
“ForeignKey”对象没有属性“getLatitude”
如果我尝试直接访问纬度,我会收到类似的错误 (placeA.latitude)
我做错了什么?我是使用 Django 框架的新手。
【问题讨论】:
-
placeAlatitude = placeA.getLatitude() 这是什么意思!!!
-
@a_k_v distance类存储placeA和placeB之间的距离。为此,我需要获取每个位置的纬度和经度。我正在尝试使用 Location 类中定义的 getLatitude 函数来返回 placeA 的纬度
-
不相关,但
getLatitude和getLongitude方法毫无用处 -latitude和longitude是公共属性,您不需要 getter。 -
@brunodesthuilliers 这仅适用于初始阶段。其他约束将在稍后添加
-
@CoderBrain 你仍然不需要它们。 Python 对计算属性有很强的支持(
property等),因此您可以随时将普通属性转换为计算属性。但是,如果您真的想要显式访问器,那么至少不要将属性公开为类 API 的一部分:将它们重命名为_latitude和_longitude(前导下划线是“受保护”的命名约定)。由于这些是模型字段,您可能还需要将字段db_column参数设置为(resp)“纬度”和“经度”以避免架构迁移。