如何在django模型中添加临时字段进行计算?

时间:2017-03-25 17:18:59

标签: django python-3.x django-models gis

我正在开发一个基于GIS的django应用程序,我将根据他当前的位置为学生分配最近的考试中心。 我有这样的中心模型

 class Center(models.Model):
    name = models.CharField(max_length=500)
    city = models.CharField(max_length=100)
    state = models.CharField(max_length=100)
    latitude = models.FloatField()
    longitude = models.FloatField()
    capicity = models.IntegerField()
    examid = models.ForeignKey(Exam)

    class Meta:
        ordering = ['distance']

我正在使用接受用户当前位置和城市的功能,然后计算当前位置与给定城市中所有可用中心之间的距离。然后按距离对它们进行排序。 但我不想改变我的中心模型,并使用距离属性作为现有中心模型的临时属性。

1 个答案:

答案 0 :(得分:0)

虽然您可以将模型实例的属性分配为: instance.attr = value

但是,您不能将它用于ordering,因为django使用order_by来实现此排序,任何此类属性都应该是Field类的实例。

您可以使用Django annotate functions执行此操作。 这些是在数据库级实现的功能,如here所述。

但是,您始终可以使用内置sorted进行排序,并且您可以使用distance进行排序,如解释here

sorted(centeres , key = lambda x : x.distance)