Django“喜欢”-ManyToManyField 与新模型

die*_*con 2 python django django-models

我正在为我的网站在个人资料上实现喜欢,但我不确定哪种是最佳实践,像这样的 ManyToManyField:

class MyUser(AbstractBaseUser):
    ...
    likes = models.ManyToManyField('self', symmetrical = False, null = True)
    ...
Run Code Online (Sandbox Code Playgroud)

或者只是创建一个类 Like,像这样:

class Like(models.Model):
    liker = models.ForeignKey(MyUser, related_name='liker')
    liked = models.ForeignKey(MyUser, related_name='liked')
Run Code Online (Sandbox Code Playgroud)

其中一个是比另一个更好的选择吗?如果是这样,为什么?

谢谢

cez*_*zar 5

应该首选第一个选项。如果你需要一些额外的字段来描述喜欢,你仍然可以through="Likes"在你的ManyToManyField和定义模型中使用Likes

操作数据条目也有点像 Pythonic:

# returns an object collection
likes_for_me = MyUser.objects.filter(pk=1).likes
Run Code Online (Sandbox Code Playgroud)

代替:

me = MyUser.objects.filter(pk=1)
likes_for_me = Like.objects.filter(liked=me)
Run Code Online (Sandbox Code Playgroud)