Я думаю, это более самоочевидно при использовании .exclude(..)
:
not_followed_post = Post.objects.exclude(
<b>postfollow__user=user</b>
).filter(
pk__lte=1000
)
. .exclude(..)
выполнит универсальное количественное определение прозрачным способом .
Я полагаю, что, вероятно, лучше добавить здесь явные related_name
s, чтобы было легче точно определить, где находится отношение.Например:
class PostFollow(models.Model):
post = models.ForeignKey(
Post,
on_delete=models.CASCADE,
null=True,
blank=True,
<b>related_name='postfollow'</b>
)
user = models.ForeignKey(
User,
on_delete=models.CASCADE,
null=True,
blank=True,
<b>related_name='postfollow'</b>
)
pk__lte
довольно странно.Обычно pk
используется только как идентификатор.Создание запросов типа __lte
, конечно, возможно, но довольно редко.
Да, pk
обычно распределяются в порядке создания (если вы не указали явный), так что если вы никогдаприсвойте явное объяснение, вы, вероятно, могли бы использовать его для получения более свежих записей, чем данная запись.Но все же я думаю, что начинать фильтрацию таким образом немного рискованно.Например, если позже вы добавите исторические данные в базу данных, то они (в зависимости от того, как вы вставляете данные) могут иметь более высокие значения id
s и, таким образом, отобразиться в результатах.