我想在Django中创建一个简单的基于地理位置的应用程序。我想将用户的位置保持为他登录的最后一个纬度/长度。为此,我创建了一个位置类。要存储其他用户数据,我有一个 UserProfile 类。我还想在 UserProfile 中保留位置列。
我可以想到实现它的三种方法 - 使用@staticmethod
,@property
或经理。然后定义一个__unicode__
方法,该方法将返回一个列表,其中包含最近日期的纬度/经度。这样做最合适的方法是什么?以下是我的模特:
class Location(models.Model):
user = models.ForeignKey(User)
latitude = models.CharField(max_length=10)
longitude = models.CharField(max_length=10)
date = models.DateTimeField(auto_now_add = True)
class UserProfile(models.Model):
user = models.OneToOneField(User)
location = the_last_login_location
rating = models.IntegerField()
答案 0 :(得分:2)
我会使用一个属性:
class Location(models.Model):
user = models.ForeignKey(User, related_name="locations")
latitude = models.CharField(max_length=10)
longitude = models.CharField(max_length=10)
date = models.DateTimeField(auto_now_add = True)
class UserProfile(models.Model):
user = models.OneToOneField(User)
rating = models.IntegerField()
@property
def last_location(self):
return self.locations.latest("date")
# Alternatively: return self.objects.all().order_by("-date")[0]
请注意related_name
我添加到user
模型中的Location
字段 - 它使反向查找更清晰,更易于阅读
修改:我将查询更改为使用latest()