Python 无法在models.py中将我的头缠绕在跟随者/目标模型上
我刚刚开始制作一个与Pinterest类似的网站,该网站有我几乎不了解的追随者/目标系统。到目前为止,我的models.py代码如下:Python 无法在models.py中将我的头缠绕在跟随者/目标模型上,python,django,django-models,Python,Django,Django Models,我刚刚开始制作一个与Pinterest类似的网站,该网站有我几乎不了解的追随者/目标系统。到目前为止,我的models.py代码如下: from django.db import models class User(models.Model): username = models.CharField(max_length=45, null=True) email = models.CharField(max_length=200, null=True)
from django.db import models
class User(models.Model):
username = models.CharField(max_length=45, null=True)
email = models.CharField(max_length=200, null=True)
password = models.CharField(max_length=200)
nickname = models.CharField(max_length=45, null=True)
target = models.ManyToManyField(self, through='Follow')
follower = models.ManyToManyField(self, through='Follow')
class Meta:
db_table = 'users'
class Follow(models.Model):
follower = models.ForeignKey(User, on_delete=models.CASCADE, related_name='targets')
target = models.ForeignKey(User, on_delete=models.CASCADE, related_name='followers')
class Meta:
db_table = 'follows'
此代码是参考另一个StackOverflow线程生成的
但是,我很难理解如何在“follower”中使用“related_name='targets”,在“target”中使用“related_name='followers”,在models.py的其他区域中我看不到任何“targets”(复数)或“followers”(复数)
既然没有所谓的“关注者”或“目标”这样的表,我应该去掉这个相关的名称吗?如果你发现我的代码或逻辑中有重大错误,你能告诉我吗?谢谢
我是否应该去掉相关的\u名称
,因为没有名为followers
或targets
的表
从来没有名为followers
或targets
的表。这是Django与其他模型之间的概念关系(在本例中为User
)。这意味着对于用户
对象myuser
,您可以通过目标
访问引用该用户的Follow
对象,例如使用myuser.followers.all()
,因此:
Follow.objects.filter(target=myuser)
相当于:
myuser.followers.all()
在这里,
User
对象myuser
可以访问myuser.follows.all()
要访问他们跟随的所有用户,myuser.follower.\u by.all()
是跟随myuser
的myuser.targets.all()的一组User
s
是他正在跟踪的Follow
对象和myuser.followers.all()的集合
是跟随该用户的Follow
对象集。相关的\u名称
意味着Django向另一个模型添加了一个关系,因此您可以通过myuser.followers
获得与目标
相关的Follow
对象。
from django.db import models
class User(models.Model):
username = models.CharField(max_length=45, unique=True)
email = models.CharField(max_length=200)
password = models.CharField(max_length=200)
nickname = models.CharField(max_length=45)
follows = models.ManyToManyField(
'self',
through='Follow',
symmetrical=False,
related_name='followed_by',
through_fields=('follower', 'target')
)
class Meta:
db_table = 'users'
class Follow(models.Model):
follower = models.ForeignKey(
User,
on_delete=models.CASCADE,
related_name='targets'
)
target = models.ForeignKey(
User,
on_delete=models.CASCADE,
related_name='followers'
)
class Meta:
db_table = 'follows'