1

我想在 Django 中创建一个简单的基于地理位置的应用程序。我想将用户的位置保留为他登录的最后一个纬度/经度。为此,我创建了一个Location类。为了存储额外的用户数据,我有一个UserProfile类。我也想将位置列保留在UserProfile中。

我可以想到三种实现方式——使用@staticmethod@property或管理器。然后定义一个__unicode__方法,该方法将返回一个包含最近日期的 lat/long 的列表。哪种方式最合适?以下是我的模型:

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()
4

1 回答 1

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()

于 2012-08-06T19:17:14.243 回答