Python 在django中实现跟踪系统并获取用户跟踪的人的帖子

Python 在django中实现跟踪系统并获取用户跟踪的人的帖子,python,sql,django,django-models,Python,Sql,Django,Django Models,我正在设计一个社交媒体网站,并且有一个追随者/追随者系统模型,当建立了以下关系时,提要将获得用户追随者的所有帖子,我尝试为我的用户类和帖子类创建如下模型: 类用户(AbstractBaseUser): first_name=models.CharField(最大长度=30) last_name=models.CharField(最大长度=30) username=models.CharField(最大长度=30,唯一性=True) 密码=models.CharField(最大长度=30) ema

我正在设计一个社交媒体网站,并且有一个追随者/追随者系统模型,当建立了以下关系时,提要将获得用户追随者的所有帖子,我尝试为我的用户类和帖子类创建如下模型:

类用户(AbstractBaseUser):
first_name=models.CharField(最大长度=30)
last_name=models.CharField(最大长度=30)
username=models.CharField(最大长度=30,唯一性=True)
密码=models.CharField(最大长度=30)
email=models.EmailField(最大长度=30,唯一性=True)
联系人编号=models.CharField(最大长度=15)
is_admin=models.BooleanField(默认值=False)
is_superuser=models.BooleanField(默认值=False)
is_active=models.BooleanField(默认值=True)
班级职务(models.Model):
发布人=models.ForeignKey(用户,在删除=models.CASCADE上)
date=models.DateField(auto\u now=True)
时间=模型.TimeField(auto\u now=True)
content=models.CharField(最大长度=2000)
媒体=模型.ImageField(空白=真)
这是建立两个用户之间关系的模型

以下类别(models.Model):
user\u id=models.ForeignKey(用户,related\u name=“following”,on\u delete=models.CASCADE)
下面的\u user\u id=models.ForeignKey(用户,相关的\u name='followers',在\u delete=models.CASCADE上)
类元:
共同唯一=(“用户id”,“后续用户id”)
但是当我试图通过此代码调用相关用户的帖子时

class提要():
定义初始化(自我,用户):
self.following=following.objects.filter(user\u id=user).values('following\u user\u id'))
def GetPosts(self):
self.post=post.objects.filter(由self\u in=self.following发布)
但是,即使在创建对象之后,这仍然会返回一个空列表,如果你们中的任何人能够帮助我,我将非常感激

编辑 问题已经解决,必须解析查询集以获取用户对象,并按照@Melvyn的建议修复模型字段中的命名约定

模型 时间线 获取以下用户帖子的文件

class Feed():
    def __init__(self,user):
        temp=Following.objects.filter(user=user)
        self.following =[temp[i].following_user for i in range(len(temp))]
    def GetPosts(self):
        self.post=Post.objects.filter(posted_by__in=self.following)

我认为问题在于这行代码
self.following=following.objects.filter(user\u id=user).values('following\u user\u id')
值('following_user_id')返回的是一个列表或dict,而不是一个对象,但在GetPosts()中,您正在对对象进行筛选
self.post=post.objects.filter(post_by_in=self.following)

self.following应该是用户对象

解决方案

除去 值('following_user_id'),并在将GetPosts(self)更改为
self.post=post.objects.filter(post\u by\u in=self.following.user\u id)

我认为问题出在这行代码中
self.following=following.objects.filter(user\u id=user).value('following\u user\u id')
值('following_user_id')返回的是一个列表或dict,而不是一个对象,但在GetPosts()中,您正在对对象进行筛选
self.post=post.objects.filter(post_by_in=self.following)

self.following应该是用户对象

解决方案

除去 值('following_user_id'),并在将GetPosts(self)更改为
self.post=post.objects.filter(post\u by\u in=self.following.user\u id)

您永远不应该将外键命名为“\u id”,它是一个模型关系,在后台Django为数据库创建一个以“\u id”结尾的字段,因此现在您拥有了
用户id\u id
。模型之间的关系不是“ID”,而是对象关系。用户跟踪用户,而不是id。我已经尝试过这样做,并按照您的建议编辑了代码,我非常感谢您纠正了这个错误,但是我仍在寻找解决问题的方法。
self.following=following.objects.filter(user\u id=user)。value\u list('followers',flat=True)
将给出一个用户id列表。我只是好奇,你正试图通过列表理解来获取这些信息。为什么不在
User
模型中的
ManyToMany
字段代替
以下的
模型?是的,刚刚尝试过,效果很好,感谢您的输入,它优化了代码。
Many-to-Many
关系的问题是,我得到了错误,我也得到了当前用户的帖子,这是我想要避免的。再加上将其拆分为不同的模型,使代码对我来说更具可读性。您永远不应该将外键命名为“\u id”,它是一个模型关系,在后台Django为数据库创建了一个以“\u id”结尾的字段,因此现在您拥有了
用户\u id\u id
。模型之间的关系不是“ID”,而是对象关系。用户跟踪用户,而不是id。我已经尝试过这样做,并按照您的建议编辑了代码,我非常感谢您纠正了这个错误,但是我仍在寻找解决问题的方法。
self.following=following.objects.filter(user\u id=user)。value\u list('followers',flat=True)
将给出一个用户id列表。我只是好奇,你正试图通过列表理解来获取这些信息。为什么不在
User
模型中的
ManyToMany
字段代替
以下的
模型?是的,刚刚尝试过,效果很好,感谢您的输入,它优化了代码。
Many-to-Many
关系的问题是,我得到了错误,我也得到了当前用户的帖子,这是我想要避免的。再加上将其分为不同的模型,使代码对我来说更具可读性。感谢您抽出时间回答这个问题,但不幸的是,这不起作用。代码返回的
查询集对象没有属性user\u id
。在这种情况下,可以使用序列化程序来解析数据吗?感谢您抽出时间回答这个问题,但不幸的是,这不起作用。代码返回
查询集对象没有属性user\u id
。在这种情况下可以使用序列化程序来解析数据吗?
class Feed():
    def __init__(self,user):
        temp=Following.objects.filter(user=user)
        self.following =[temp[i].following_user for i in range(len(temp))]
    def GetPosts(self):
        self.post=Post.objects.filter(posted_by__in=self.following)