在Django模型中,我正在创建一个表'追随者',其中包含:
user's id. (this is followed by)
user's id (this is follower)
用户可以跟随其他用户这么简单。
我应该如何在Django中定义模型?
我尝试了这个,但不起作用:
user = models.ForeignKey('self')
follower_id = models.ForeignKey('self')
应该怎么做?
感谢
答案 0 :(得分:2)
除非你有一个名为self
的模型,否则'self'参数将不起作用。
假设您的作业模型名为Following
,并且您正在使用内置的User
模型,那么您可以这样做:
class Following(models.Model):
target = models.ForeignKey('User', related_name='followers')
follower = models.ForeignKey('User', related_name='targets')
这可能需要一些进一步的唯一性和验证逻辑。
请注意related_name
属性,请参阅https://docs.djangoproject.com/en/1.10/ref/models/fields/#django.db.models.ForeignKey.related_name。这意味着,对于给定的用户对象,您可以user.targets.all()
来吸引他们关注的用户,并user.followers.all()
来吸引关注他们的用户。
另请注意,Django会在ORM中返回目标模型实例,而不是ID。这意味着即使基础表可能被称为follower_id
,在python代码following.follower
中也会返回一个实际的User对象。
答案 1 :(得分:0)
对于用户之间的多对多关系,看成Following
实际上是through表。我将创建一个扩展Django Profile
模型的User
模型,然后声明多对多关系(使用ManyToManyField
)。
from django.contrib.auth.models import User
from django.db import models
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
following = models.ManyToManyField(User, related_name='followers')
答案 2 :(得分:0)
使用多对多字段。
followers = models.ManyToManyField('self', symmetrical=False)