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