[英]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.