Django 模型:用户和关注者的数据库设计

0 django postgresql model psql

在 Django 模型中,我正在创建一个“followers”表,其中包含:

user's id. (this is followed by)
user's id (this is follower)
Run Code Online (Sandbox Code Playgroud)

用户可以关注其他用户,这很简单。

我应该如何在 Django 中定义模型?

我尝试过这个,但不起作用:

user = models.ForeignKey('self')
follower_id = models.ForeignKey('self')
Run Code Online (Sandbox Code Playgroud)

这应该怎么做呢?

谢谢

nim*_*smi 5

除非你有一个名为 的模型,否则“self”参数将不起作用self

假设您的分配模型被称为Following,并且您正在使用内置User模型,那么您可以执行以下操作:

class Following(models.Model):
    target = models.ForeignKey('User', related_name='followers')
    follower = models.ForeignKey('User', related_name='targets')
Run Code Online (Sandbox Code Playgroud)

这可能需要一些进一步的唯一性和验证逻辑。

请注意该related_name属性,请参阅https://docs.djangoproject.com/en/1.10/ref/models/fields/#django.db.models.ForeignKey.lated_name。这意味着对于给定的用户对象,您可以user.targets.all()获取他们关注的用户,以及user.followers.all()获取关注他们的用户。

另请注意,Django 在 ORM 中返回目标模型实例,而不是 ID。这意味着即使可能调用底层表follower_id,在Python代码中following.follower也会返回一个实际的User对象。