簡體   English   中英

Django多對多關系或一對多關系

[英]Django Many-to-Many Relation or One-to-Many relation

我在django中有這張桌子:

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)

用戶可以發布Phtotos,他們可以喜歡Photos。但是我不知道如何在phtoto中編寫類似圖片,我應該使用多對多還是多對多?

以及我如何獲得喜歡照片的用戶。

感謝幫助 。

UPDATE

最終,我決定對貫通模型使用多對多關系,因為我也想記錄時間。 我選擇的型號是這些

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'

您只需要考慮照片的喜歡程度。

用戶可以喜歡很多照片嗎?

一個用戶可以喜歡很多照片嗎?

那是很多對很多。

您可以這樣實現

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()
class Like(models.Model):
    user = models.ForeignKey(User)
    photo  = models.ForeignKey(Photo)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM