GeoDjango模型的最佳实践
我有一个经典的詹戈模型GeoDjango模型的最佳实践,django,geodjango,Django,Geodjango,我有一个经典的詹戈模型 from django.contrib.gis.db import models class Location(models.Model): vessel = models.ForeignKey(Vessel, on_delete=models.CASCADE) timestamp = models.DateTimeField(auto_now_add=True, blank=True) point = models.PointField()
from django.contrib.gis.db import models
class Location(models.Model):
vessel = models.ForeignKey(Vessel, on_delete=models.CASCADE)
timestamp = models.DateTimeField(auto_now_add=True, blank=True)
point = models.PointField()
然而,使用起来似乎相当笨拙
>>> foo = somevessel.location_set.create(point=Point(5, 23))
>>> foo.point.x
5.0
我仍然希望将位置存储为一个点,但更希望使用更本地的代码与模型交互,比如
>>> foo = somevessel.location_set.create(latitude=5, longitude=12)
>>> foo.latitude
5.0
这是否违反了最佳实践?在Django有没有一个简单的方法来实现这一点?我认为,像这样含蓄地形式化你的观点,即用纬度和经度s,不会让你从中充分受益。如果不是一个“坏习惯”,这很可能是一个没有起点 我仍然希望将位置存储为一个点,但更希望与具有更多本地代码的模型交互 为了以更自然的方式与模型交互,我将在我的模型类中定义属性,这些属性实际上将返回纬度和/或经度,这样做
from django.contrib.gis.db import models
class Location(models.Model):
vessel = models.ForeignKey(Vessel, on_delete=models.CASCADE)
timestamp = models.DateTimeField(auto_now_add=True, blank=True)
point = models.PointField()
@property
def latitude(self):
return self.point.x
@property
def longitude(self):
return self.point.y
允许你做
>>> foo = somevessel.location_set.create(point=Point(5, 23))
>>> foo.latitude
5.0