Фильтры Django с условным полем

У меня есть модальная страница User и модель UserAddress. Я пытаюсь сортировать пользователей на основе поля UserAddress.city.

#models

class User(AbstractUser):
    ...

class UserAddress(TimeStampedModel):
    ...
    city = models.CharField(max_length=50, null=True)
    ...
    primary = models.BooleanField(default=False) #User can only have 1 primary record
    active = models.BooleanField(default=True)


#viewset

class UserViewset(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = serializers.UserSerializer

    ordering_fields = [
        ...
        'useraddress__city'
    ]

#serializers

class UserBasicSerializer(serializers.ModelSerializer):
    user_city = serializers.SerializerMethodField()

    def get_user_city(self, obj):
        try:
            address = models.UserAddress.objects.filter(
                            primary=True, active-True, user=obj
                      ).first()
            return address.city
        except:
            return None

    class Meta(object):
        model = User
        fields = (
            ...
            "user_city",
            ...
        )

Если использовать domain?sort=London, то это работает, однако не учитывает активные и первичные поля. Поэтому я получаю сортировку с пробелами null в результате. Я хочу рассматривать эти пробелы как настоящие нулевые значения, но не знаю как.

P.S. Я использую JSON API, поэтому сортировка и не упорядочивание в url.

Вернуться на верх