1

Djangoでシンプルなジオロケーションベースのアプリを作成したいと思います。ユーザーの場所を、ユーザーがログインした場所からの最後の緯度/経度として保持したいと思います。そのために、Locationクラスを作成しました。追加のユーザーデータを保存するために、UserProfileクラスがあります。UserProfileの場所の列も保持したいと思います。

私が考えることができるそれを実装する3つの方法があります-、、、またはマネージャーを使用し@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()
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追加したことに注意してください。これにより、逆引き参照が少しきれいになり、読みやすくなります。userLocation

編集: latest()を使用するようにクエリを変更しました

于 2012-08-06T19:17:14.243 に答える