我的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,他们可以喜欢照片。但是我不知道如何在phtoto中写出类似内容,我应该使用一对多还是多对多?
我怎样才能得到喜欢照片的用户。
感谢您的帮助。
更新
最后,我决定使用一个通过模型的多对多,因为我也想记录时间。我已经确定的模型是这些
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'
答案 0 :(得分: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()
答案 1 :(得分:0)
class Like(models.Model):
user = models.ForeignKey(User)
photo = models.ForeignKey(Photo)