Как изменить выражение ON в django-orm select_related()

Итак, у меня есть следующие модели

class ApplicationForHelp(BaseModel):
    user = models.ForeignKey(User, related_name="applications", on_delete=models.CASCADE)
    tags = models.ManyToManyField(TagsForApplication, related_name="applications")
    title = models.CharField(max_length=50)
    description = models.TextField()
    is_anonymous = models.BooleanField(default=False)
    place = models.TextField(null=True)

И модель пользователя

so if do ApplicationForHelp.objects.filter().select_related('user')

что это делает : left join ON application.user_id = user.id

что я хочу : left join ON (application.user_id = user.id и application.is_anonymous=False)

>

В документации к объектам FilteredRelation говорится:

FilteredRelation используется с annotate() для создания предложения ON, когда выполняется JOIN. JOIN.

Учитывая usernames, итерабельность имен пользователей, и предполагая, что ищется ApplicationForHelp объект, чей user внешний ключ имеет имя пользователя в usernames и чье is_anonymous поле False:

from django.db.models import FilteredRelation, Q
apps = (
    ApplicationForHelp.objects
    .annotate(
        not_anonymous=FilteredRelation(
            'user',
            condition=Q(is_anonymous=False)
        )
     )
    .filter(not_anonymous__username__in=usernames)
    .select_related('user')
)
Вернуться на верх