Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.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
Django 在这种情况下如何制作Q对象表达式(按ForeignKey字段过滤)?_Django_Django Orm - Fatal编程技术网

Django 在这种情况下如何制作Q对象表达式(按ForeignKey字段过滤)?

Django 在这种情况下如何制作Q对象表达式(按ForeignKey字段过滤)?,django,django-orm,Django,Django Orm,models.py: class Post(models.Model): title = models.TextField(max_length=1000, null=True, blank=True, default=None) created = models.DateTimeField(auto_now_add=True) class PostFollow(models.Model): post = models.ForeignKey(Post, on_dele

models.py:

class Post(models.Model):
    title = models.TextField(max_length=1000, null=True, blank=True, default=None)
    created = models.DateTimeField(auto_now_add=True)


class PostFollow(models.Model):
    post = models.ForeignKey(Post, on_delete=models.CASCADE, null=True, blank=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
从这些模型类中,我想得到一些用户没有遵循的帖子

像这样:

user = User.objects.get(pk=1)

not_followed_post = Post.objects.filter(Q(pk__lte=1000) & ~Q(self__is_not_followed_by_user=user))

我怎样才能做到这一点?

我认为使用
.exclude(…)
更能自我解释:

pk\uu lte
相当怪异。通常,
pk
仅用作标识符。当然,像
\uu lte
这样的查询是可能的,但并不常见

是的,
pk
s通常是按创建顺序“分布”的(假设您没有指定显式的),因此如果您从未指定显式的,您可能会使用它来获取比给定记录更近的记录。但我仍然认为以这种方式开始过滤有点“风险”。例如,如果以后将历史数据添加到数据库中,则这些数据(取决于插入数据的方式)可能具有更高的
id
s,从而显示在结果中

not_followed_post = Post.objects.exclude(
    postfollow__user=user
).filter(
    pk__lte=1000
)
class PostFollow(models.Model):
    post = models.ForeignKey(
        Post,
        on_delete=models.CASCADE,
        null=True,
        blank=True,
        related_name='postfollow'
    )
    user = models.ForeignKey(
        User,
        on_delete=models.CASCADE,
        null=True,
        blank=True,
        related_name='postfollow'
    )