猿问

'ForeignKey' 对象没有属性

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


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


慕村225694
浏览 156回答 2
2回答

一只甜甜圈

首先,有可能在一个错误Location的模型:你在这里不会兴建的FloatFieldS和IntegerField:你只传递给类的引用,你不“来电”了。因此,为了定义这些列,您应该添加括号:class Location(models.Model):    name = models.CharField(max_length=200)    latitude = models.FloatField()    longitude = models.FloatField()    altitude = models.IntegerField()    # ...接下来,您不能定义placeAlatitude等方面与placeA.GetLatitude()在一流水平placeA是一个ForeignKey对象,不是一个Location,对象,但是,您可以定义@property这里的意志,对于一个Distance对象,获取相关对象的正确的属性:class Distance(models.Model):    placeA = models.ForeignKey(Location, on_delete=models.CASCADE)    placeB = models.ForeignKey(Location, on_delete=models.CASCADE)    distance = models.FloatField(default = 0.0)    @property    def placeAlatitude(self):        return self.placeA.latitude    @property    def placeBlatitude(self):        return self.placeB.latitude    @property    def placeAlongitude(self):        return self.placeA.longitude    @property    def placeBlongitude(self):        return self.placeB.longitude

尚方宝剑之说

在您的模型中,您正在定义结构。你不能用placeAlatitude = placeA.getLatitude()placeBlatitude = placeB.getLatitude() placeAlatitude 和 placeBlatitude 必须定义模型的类型。你不能简单地返回值。通过分析您的模型,这两个字段不是必需的,它是冗余值(placeAlongitude 和 placeBlongitude 的情况相同)。您定义了与位置的外键关系。因此,您可以使用该关系访问经度和纬度。
随时随地看视频慕课网APP

相关分类

Python
我要回答