Skip to content
Snippets Groups Projects
fields.py 1.09 KiB
Newer Older
  • Learn to ignore specific revisions
  • import django_filters
    
    from django.db import models
    
    
    from funkwhale_api.music import utils
    
    
    PRIVACY_LEVEL_CHOICES = [
    
    Eliot Berriot's avatar
    Eliot Berriot committed
        ("me", "Only me"),
        ("followers", "Me and my followers"),
        ("instance", "Everyone on my instance, and my followers"),
        ("everyone", "Everyone, including people on other instances"),
    
    ]
    
    
    def get_privacy_field():
        return models.CharField(
    
    Eliot Berriot's avatar
    Eliot Berriot committed
            max_length=30, choices=PRIVACY_LEVEL_CHOICES, default="instance"
        )
    
    def privacy_level_query(user, lookup_field="privacy_level", user_field="user"):
    
        if user.is_anonymous:
    
    Eliot Berriot's avatar
    Eliot Berriot committed
            return models.Q(**{lookup_field: "everyone"})
    
    Eliot Berriot's avatar
    Eliot Berriot committed
        return models.Q(
    
            **{"{}__in".format(lookup_field): ["instance", "everyone"]}
        ) | models.Q(**{lookup_field: "me", user_field: user})
    
    
    
    class SearchFilter(django_filters.CharFilter):
        def __init__(self, *args, **kwargs):
    
    Eliot Berriot's avatar
    Eliot Berriot committed
            self.search_fields = kwargs.pop("search_fields")
    
            super().__init__(*args, **kwargs)
    
        def filter(self, qs, value):
            if not value:
                return qs
            query = utils.get_query(value, self.search_fields)
            return qs.filter(query)