我有以下型号:
class User(AbstractUser):
pass
class Post(models.Model):
post_user = models.ForeignKey(User, on_delete=models.CASCADE)
post_content = models.TextField()
post_date = models.DateTimeField(default=timezone.now)
class Follow(models.Model):
follow_user = models.ForeignKey(User, on_delete=models.CASCADE)
follow_target = models.ForeignKey(User, on_delete=models.CASCADE, related_name='follow_target')
我正在尝试创建一个由我关注的用户(我是当前登录的用户)创建的所有帖子的查询集。我的查询集当前看起来像这样,但我一直在获取NameError:找不到字段:
postresult = Post.objects.all().filter(post_user=follow__follow_target, follow__follow_user=request.user)
任何帮助将不胜感激!
答案 0 :(得分:0)
您的过滤条件为:
postresult = Post.objects.filter(
post_user__follow_target__follow_user=request.user
)
post_user
将跟随ForeignKey
从Post
到User
。然后,我们使用related_name='follow_target'
来跟踪与Follow
对象的关系,然后我们使用follow_user
来检索以下用户。
注意:与直接使用
settings.AUTH_USER_MODEL
[Django-doc]相比,通常最好使用User
model [Django-doc]来引用用户模型。有关更多信息,请参见referencing theUser
model section of the documentation。
注意:
related_name=…
parameter [Django-doc] 是 reverse 中关系的名称,因此从User
模型到Follow
在这种情况下的模型。因此,(通常)将其命名为 与前向关系相同。因此,您可能需要考虑将关系重命名为follow_target
followers
。
如果重命名相关名称,则查询为:
postresult = Post.objects.filter(
post_user__followers__follow_user=request.user
)