Django manytomy关系或one-omany关系

2024-04-25 13:57:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我的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)

用户可以发布phtoto,他们也可以喜欢照片,但是我不知道如何在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'

Tags: nameselfdatetimemodelmodelslengthmaxclass
2条回答

你只需要想想照片是如何被喜欢的。你知道吗

一个用户能喜欢很多照片吗?你知道吗

一个用户能喜欢多张照片吗?你知道吗

那就是多对多了。你知道吗

你可以这样实现它

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)

相关问题 更多 >