【发布时间】:2020-09-05 21:01:56
【问题描述】:
我正在设计一个社交媒体网站,并有一个追随者/追随者系统模型,当建立追随关系时,提要将获得用户追随者的所有帖子,我试图为我的用户制作模型类和post类如下:
class User(AbstractBaseUser):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
username = models.CharField(max_length=30, unique=True)
password = models.CharField(max_length=30)
email = models.EmailField(max_length=30, unique=True)
contact_no = models.CharField(max_length=15)
is_admin = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
class Post(models.Model):
posted_by=models.ForeignKey(User,on_delete=models.CASCADE)
date= models.DateField(auto_now=True)
time=models.TimeField(auto_now=True)
content=models.CharField(max_length=2000)
media=models.ImageField(blank=True)
这就是建立两个用户之间关系的模型。
class Following(models.Model):
user_id = models.ForeignKey(User, related_name="following", on_delete=models.CASCADE)
following_user_id= models.ForeignKey(User,related_name='followers',on_delete=models.CASCADE)
class Meta:
unique_together = ("user_id", "following_user_id")
但是当我通过这段代码调用相关用户的帖子时尝试组合事物时
class Feed():
def __init__(self,User):
self.following=Following.objects.filter(user_id=User).values('following_user_id')
def GetPosts(self):
self.post=Post.objects.filter(posted_by__in=self.following)
但是,即使在创建对象之后,这也会返回一个空列表,如果你们中的任何人无论如何都可以帮助我,我将不胜感激。
编辑
问题已解决,必须解析查询集以获取用户对象并按照@Melvyn 的建议修复模型字段中的命名约定
型号
class Following(models.Model):
user = models.ForeignKey(User, related_name="following", on_delete=models.CASCADE)
following_user= models.ForeignKey(User,related_name='followers',on_delete=models.CASCADE)
class Meta:
unique_together = ("user_id", "following_user_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)
【问题讨论】:
-
你永远不应该将外键命名为“_id”,它是一个模型关系,在底层,Django 为数据库创建了一个以“_id”结尾的字段,所以现在你有了
user_id_id。模型之间的关系不是“id”而是对象关系。用户关注用户,而不是 id。 -
我已经尝试按照您的建议编辑代码,非常感谢您纠正了这个错误,但是我仍在寻找解决问题的方法。
-
self.following=Following.objects.filter(user_id=User).values_list('followers', flat=True)将提供用户 ID 列表。您正在尝试使用列表理解来获得它 -
另外,我只是好奇。为什么不在
User模型中使用ManyToMany字段而不是Following模型? -
是的,刚刚尝试过,它可以工作 感谢您的输入,它优化了代码。与
Many to Many关系的事情是我收到了错误,我也收到了当前用户的帖子,我想避免这种情况。加上将它分成不同的模型使代码对我来说更具可读性。
标签: python sql django django-models