Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法在models.py中将我的头缠绕在跟随者/目标模型上_Python_Django_Django Models - Fatal编程技术网

Python 无法在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)

我刚刚开始制作一个与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)
    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'