“ ForeignKey”对象没有属性

时间:2018-10-30 06:36:12

标签: python django migration

当我尝试为以下模型进行迁移时:

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框架的新手。

2 个答案:

答案 0 :(得分:1)

在模型中,您正在定义结构。您不能使用

placeAlatitude = placeA.getLatitude()
placeBlatitude = placeB.getLatitude() 

placeAlatitude和placeBlatitude必须定义模型的类型。您不能简单地返回值。

通过分析模型,这两个字段不是必需的,它们是冗余值(placeAlongitude和placeBlongitude相同)。您定义了与位置的外键关系。因此,您可以使用该关系来访问经度和纬度。

答案 1 :(得分:1)

首先,您的Location模型中可能有一个错误:您在这里没有构造 FloatFieldIntegerField:您只传递了一个引用该类时,您不要“调用”它。因此,为了定义这些列,您应该添加括号:

class Location(models.Model):
    name = models.CharField(max_length=200)
    latitude = models.FloatField()
    longitude = models.FloatField()
    altitude = models.IntegerField()

    # ...

接下来,您无法使用placeAlatitude定义placeA.GetLatitude()等,在类级别placeAForeignKey对象,不是是{ {1}}对象,但是您可以在此处定义Location,对于@property对象,它将获取相关对象的正确属性:

Distance