决定在Django中使用@staticmethod,@property或manager

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

有三种方法可以实现它 - 使用@property @staticmethod@property @staticmethod或经理。 然后定义一个__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()

我会使用一个属性:

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]

请注意我添加到Location模型中的user字段的related_name - 它使反向查找更清晰,更易于阅读

编辑 :我改变了查询使用最新()

链接地址: http://www.djcxy.com/p/55153.html

上一篇: Deciding to use @staticmethod, @property, or manager in Django

下一篇: object has no attribute