0

私は私のジャンゴにこのテーブルを持っています:

class User(models.Model):
   username = models.CharField(max_length=40)

class Photo(models.Model):
   publish_by = models.ForeignKey(User)
   name = models.CharField(max_length=40)
   desc = models.CharField(max_length=40)

ユーザーは写真を公開することができ、彼らは写真を気に入ることができます。しかし、私は写真に好きなものを書く方法がわかりません。

Photo が好きなユーザーを取得するにはどうすればよいですか。

手伝ってくれてありがとう 。

アップデート

結局、時間も記録したかったので、スルー モデルで多対多を使用することにしました。私が落ち着いたモデルはこれらです

class User(models.Model):
   username = models.CharField(max_length=40)

 class Photo(Model):
    author = models.ForeignKey(User, related_name='%(class)ss')
    publish_time =  models.DateTimeField(default=datetime.datetime.now)
    liked_by = models.ManyToManyField(User, related_name="likes",through='PhotoLike',)

    def like(self, user):
        liked, created = PhotoLike.objects.get_or_create(photo=self,user=user)
        return liked

    def save(self, *args, **kwargs):
        super(Photo, self).save(*args, **kwargs)

    class Meta:
        app_label = 'meinv'

class PhotoLike(models.Model):
    user = models.ForeignKey(User)
    photo = models.ForeignKey(Photo)
    like_time =  models.DateTimeField(default=datetime.datetime.now)

    class Meta:
        app_label = 'meinv'
4

2 に答える 2

1

写真がどのように好まれるかを考える必要があります。

ユーザーは多くの写真を高く評価できますか?

1 人のユーザーが多くの写真を気に入ることはできますか?

次に、多対多です。

このように実装します

class Photo(models.Model):
    publish_by = models.ForeignKey(User)
    name = models.CharField(max_length=40)
    desc = models.CharField(max_length=40)
    liked_by = models.ManyToManyField(User, related_name="likes")

次に、次のように機能します。写真にいいねを追加できます

photoInstance.liked_by.add(user)

この方法で写真のようなものにアクセスします

 photoInstance.liked_by.all()

ユーザーが気に入ったすべての写真を取得するには

user.likes.all()
于 2013-09-02T08:13:23.083 に答える
0
class Like(models.Model):
    user = models.ForeignKey(User)
    photo  = models.ForeignKey(Photo)
于 2013-09-02T08:06:49.540 に答える