为了账号安全,请及时绑定邮箱和手机立即绑定

'ForeignKey' 对象没有属性

'ForeignKey' 对象没有属性

慕村225694 2021-07-28 17:49:30
当我尝试为以下模型进行迁移时: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.longitudeclass 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 回答

?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

首先,有可能在一个错误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


查看完整回答
反对 回复 2021-08-03
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

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


placeAlatitude = placeA.getLatitude()

placeBlatitude = placeB.getLatitude() 

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


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



查看完整回答
反对 回复 2021-08-03
  • 2 回答
  • 0 关注
  • 149 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信