Exemple #1
0
class CategoryFilterSet(BaseFilterSet):
    name = CharFilter(name="name", lookup_expr='icontains')
    name__exact = CharFilter(name="name", lookup_expr='exact')

    class Meta:
        model = CategoryModel
        fields = ['name', 'name__exact']
Exemple #2
0
class PollFilter(FilterSet):
    """
    This class is needed because Django does not allow to filter on properties.

    Inspired by https://stackoverflow.com/a/44990300.
    """

    is_published = CharFilter(method="filter_is_published")
    is_active = CharFilter(method="filter_is_active")
    user = CharFilter(field_name="user__id")
    state = MultipleChoiceFilter(choices=Poll.STATES)

    class Meta:
        model = Poll
        fields = ("is_published", "is_active", "state", "user")

    def filter_is_published(self, queryset, name, value):
        condition = Q(publication_date__lte=date.today()) & Q(state="ACCEPTED")

        if value.lower() == "true" or len(value) == 0:
            return queryset.filter(condition)
        else:
            return queryset.exclude(condition)

    def filter_is_active(self, queryset, _, value):
        condition = (
            Q(publication_date__lte=date.today())
            & Q(state="ACCEPTED")
            & Q(publication_date__gt=date.today() - Poll.POLL_LIFETIME))

        if value.lower() == "true" or len(value) == 0:
            return queryset.filter(condition)
        else:
            return queryset.exclude(condition)
Exemple #3
0
class LessonFilter(FilterSet):
    discipline = CharFilter(field_name='discipline',
                            lookup_expr='discipline__title__icontains')
    group = CharFilter(field_name='group', lookup_expr='code__icontains')
    teacher = CharFilter(field_name='teacher', method='filter_teacher')
    lecture_hall = CharFilter(field_name='lecture_hall',
                              lookup_expr='code__icontains')

    def filter_teacher(self, queryset, name, value):
        values = value.split(',')
        q = Q()
        for val in values:
            q |= Q(teacher__first_name__icontains=val)
            q |= Q(teacher__last_name__icontains=val)
            q |= Q(teacher__middle_name__icontains=val)
        return queryset.filter(q)

    class Meta:
        model = Lesson
        fields = {
            'discipline': ['exact'],
            'group': ['exact'],
            'teacher': ['exact', 'in'],
            'lecture_hall': ['exact'],
        }
Exemple #4
0
class GroupActivityFilter(FilterSet):

    status = NumberFilter(method='status_filter', label='status')
    create_user_id = NumberFilter('user_id')
    group_no = CharFilter('group_no')
    parent_user = CharFilter(method='parent_user_filter', label='parent_user')
    grant_status = CharFilter(method='grant_status_filter',
                              label='grant_status')

    def grant_status_filter(self, queryset, name, value):
        queryset = queryset.filter(grant_award=value)
        return queryset

    def parent_user_filter(self, queryset, name, value):
        queryset = queryset.filter(
            Q(group_member__parent_user__username__contains=value)
            | Q(group_member__parent_user__real_name__contains=value))
        return queryset

    def status_filter(self, queryset, name, value):
        queryset = queryset.filter(status=value)
        return queryset

    class Meta:
        model = ActivityGroupInfo
        fields = ['status', 'create_user_id', 'grant_status', 'parent_user']
Exemple #5
0
class ProjectFilterSet(FilterSet):
    key_any = CharFilter(
        method='filter_any',
        label="Key, Title, Keyword, PI, Lay summary or Organisation")
    geographical_areas = CharFilter(method='filter_geographical_areas')
    funding_instrument = CharFilter(method='filter_funding_instrument')
    start_date = CharFilter(method='filter_start_date')

    def filter_any(self, queryset, name, value):
        fields = [
            "key", "title", "keywords__name",
            "principal_investigator__person__first_name",
            "principal_investigator__person__surname", "laysummary__text",
            "principal_investigator__organisation_names__name"
        ]
        q_field = reduce(or_, (Q(**{f"{field}__icontains": word})
                               for word in value.split() for field in fields))

        return queryset.filter(q_field).distinct()

    def filter_geographical_areas(self, queryset, name, value):
        return queryset.filter(geographical_areas__name=value)

    def filter_funding_instrument(self, queryset, name, value):
        return queryset.filter(funding_instrument__long_name=value)

    def filter_start_date(self, queryset, name, value):
        return queryset.filter(start_date__year__lte=value,
                               end_date__year__gte=value)

    class Meta:
        model = Project
        fields = ('key_any', 'geographical_areas', 'funding_instrument',
                  'start_date')
Exemple #6
0
class UserFilterSet(FilterSet):
    email = CharFilter(name="email", method=wildcard_filter)
    last_name = CharFilter(name="last_name", method=wildcard_filter)

    class Meta:
        model = get_user_model()
        fields = ["email", "last_name"]
Exemple #7
0
class DocumentFilterSet(FilterSet):

    CHAR_KWARGS = {
        "lookup_expr": (
            "startswith",
            "endswith",
            "contains",
            "istartswith",
            "iendswith",
            "icontains"
        )
    }

    correspondent__name = CharFilter(
        field_name="correspondent__name", **CHAR_KWARGS)
    correspondent__slug = CharFilter(
        field_name="correspondent__slug", **CHAR_KWARGS)
    tags__name = CharFilter(
        field_name="tags__name", **CHAR_KWARGS)
    tags__slug = CharFilter(
        field_name="tags__slug", **CHAR_KWARGS)
    tags__empty = BooleanFilter(
        field_name="tags", lookup_expr="isnull", distinct=True)

    class Meta:
        model = Document
        fields = {
            "title": [
                "startswith", "endswith", "contains",
                "istartswith", "iendswith", "icontains"
            ],
            "content": ["contains", "icontains"],
        }
Exemple #8
0
class BankTransactionFilter(FilterSet):
    account_number = CharFilter(method='filter_account_number')
    fee = CharFilter(method='filter_fee')

    class Meta:
        model = BankTransaction
        fields = [
            'id',
            'account_number',
            'block__sender',
            'block__balance_key',
            'fee',
            'recipient',
        ]

    @staticmethod
    def filter_account_number(queryset, _, value):
        """Filter queryset by account number"""
        return queryset.filter(
            Q(block__sender=value)
            | Q(recipient=value)
        )

    @staticmethod
    def filter_fee(queryset, _, value):
        """Filter queryset by fee"""
        if value == 'NONE':
            return queryset.filter(
                fee__exact='',
            )

        return queryset.filter(
            fee__exact=value,
        )
Exemple #9
0
class TaskFilter(BaseFilterSet):
    lab = CharFilter('session__lab__name')
    status = CharFilter(method='enum_field_filter')

    class Meta:
        model = Task
        exclude = ['json']
Exemple #10
0
class MembershipFilterSet(FilterSet):

    userUsername = CharFilter(field_name="user__username", lookup_expr="icontains")
    userFullname = CharFilter(field_name="userFullname", method="user__fullname")
    abakusGroupName = CharFilter(
        field_name="abakus_group__name", lookup_expr="icontains"
    )

    class Meta:
        model = Membership
        fields = (
            "role",
            "userUsername",
            "abakusGroupName",
            "userFullname",
        )

    def user__fullname(self, queryset, name, value):
        if value:
            return queryset.annotate(
                user__fullname=Concat(
                    F("user__first_name"), Value(" "), F("user__last_name")
                )
            ).filter(user__fullname__icontains=value)
        return queryset
Exemple #11
0
class UnitReportFilter(FilterSet):

    status = NumberFilter(method='status_filter', label='status')
    id = NumberFilter('id')
    student_name = CharFilter(method='student_name_filter', label='student_name')
    course_edition = NumberFilter(method='course_edition_filter', label='course_edition')
    course_level = NumberFilter(method='course_level_filter', label='course_level')
    course_unit = NumberFilter('unit_no')
    user_name = CharFilter(method='user_name_filter', label='user_name')
    tutor_name = CharFilter(method='tutor_name_filter', label='tutor_name')
    send_parent = NumberFilter('status')
    examine_user = CharFilter(method='examine_user_filter', label='examine_user')

    def examine_user_filter(self, queryset, name, value):
        cms_user = UserInfo.objects.filter(realname__icontains=value).first()
        if not cms_user:
            return queryset
        queryset = queryset.filter(unit_report_audit__audit_user_id=cms_user.id)
        return queryset


    def status_filter(self, queryset, name, value):
        if int(value) == VirtualclassUnitReport.EXAMINED:
            queryset = queryset.filter(Q(status=VirtualclassUnitReport.EXAMINED)|Q(status=VirtualclassUnitReport.SAVED))
        else:
            queryset = queryset.filter(status=value)
        return queryset

    def tutor_name_filter(self, queryset, name, value):
        queryset = queryset.filter(
            Q(tutor_user__username__icontains=value) | Q(tutor_user__email__icontains=value) | Q(tutor_user__phone__icontains=value) | Q(
                tutor_user__real_name__icontains=value))
        return queryset

    def user_name_filter(self, queryset, name, value):
        queryset = queryset.filter(
            Q(student_user__parent_user__adviser_user_id=value) | Q(student_user__parent_user__xg_user_id=value))
        return queryset

    def student_name_filter(self, queryset, name, value):
        queryset = queryset.filter(
            Q(student_user__real_name__icontains=value) |
            Q(student_user__parent_user__username__icontains=value) |
            Q(student_user__parent_user__email__icontains=value) |
            Q(student_user__parent_user__phone__icontains=value))
        return queryset

    def course_edition_filter(self, queryset, name, value):
        queryset = queryset.filter(virtual_class__lesson__course__course_edition_id=value)
        return queryset

    def course_level_filter(self, queryset, name, value):
        queryset = queryset.filter(virtual_class__lesson__course__course_level=value)
        return queryset

    class Meta:
        model = VirtualclassUnitReport
        fields = ['id', 'status', 'student_name', 'course_edition', 'course_level',
                  'course_unit', 'user_name', 'tutor_name', 'send_parent', 'examine_user']
Exemple #12
0
class ProductFilter(ActiveFilterMixin):
    company = CharFilter(field_name='company__name')
    category = CharFilter(field_name='category__name')
    name = CharFilter(field_name='name', lookup_expr='icontains')

    class Meta:
        model = Product
        fields = ['is_active', 'company', 'name', 'category']
Exemple #13
0
class EmailListFilterSet(FilterSet):

    name = CharFilter(lookup_expr="icontains")
    email = CharFilter(field_name="email__email", lookup_expr="icontains")

    class Meta:
        model = EmailList
        fields = ("name", "email")
Exemple #14
0
class EmailListFilterSet(FilterSet):

    name = CharFilter(lookup_expr='icontains')
    email = CharFilter(field_name='email__email', lookup_expr='icontains')

    class Meta:
        model = EmailList
        fields = ('name', 'email')
Exemple #15
0
class TitleFilter(FilterSet):
    genre = CharFilter(field_name='genre__slug')
    category = CharFilter(field_name='category__slug')
    name = CharFilter(field_name='name', lookup_expr='icontains')

    class Meta:
        model = Title
        fields = ['year']
Exemple #16
0
class MajorFilter(FilterSet):
    department_name = CharFilter(field_name='department__name', label='부서 이름')
    department_id = NumberFilter(field_name='department__id', label='부서 객체의 pk')
    major_name = CharFilter(field_name='name', label='전공 이름')
    major_id = NumberFilter(field_name='id', label='전공 객체의 pk')

    class Meta:
        model = Major
        fields = ['department_name', 'department_id', 'major_name', 'major_id']
Exemple #17
0
class UserFilter(FilterSet):
    username = CharFilter(field_name='username', lookup_expr='exact', label='Filter by username, exact match')
    email = CharFilter(field_name='email', lookup_expr='iexact', label='Filter by email, exact match')
    role = NumberInFilter(field_name='role', lookup_expr='in', label='Filter by role ID (or a list of role IDs)')
    organization = NumberInFilter(field_name='organization', lookup_expr='in', label='Filter by organization ID (or a list of organization IDs)')

    class Meta:
        model = User
        fields = ['username', 'email', 'role', 'organization', ]
Exemple #18
0
class EmailListFilterSet(FilterSet):

    name = CharFilter(lookup_expr="icontains")
    email = CharFilter(lookup_expr="icontains", field_name="email__email")
    requireInternalAddress = BooleanFilter(field_name="require_internal_address")

    class Meta:
        model = EmailList
        fields = ("name", "email", "requireInternalAddress")
class UserFilter(FilterSet, DateFilterMixin):
    game_created = DateFilter(name='active_game__date_created', method='filter_date')
    game_updated = DateFilter(name='active_game__date_updated', method='filter_date')
    state = CharFilter(name='active_game__state')
    team = CharFilter(name='team__name')

    class Meta:
        model = User
        fields = ('state', 'is_finalist', 'team', 'handedness', 'signed_waiver')
Exemple #20
0
class GenInfoFilter(FilterSet):
    """自定义过滤器-一般信息的过滤"""

    name = CharFilter(field_name="name", lookup_expr='icontains')
    nation = CharFilter(field_name="nation", lookup_expr='contains')

    class Meta:
        model = GeneralInfo
        fields = ['name', 'nation']
Exemple #21
0
class DepartmentFilter(FilterSet):
    medical_center_name = CharFilter(field_name='medical_center__name', label='병원 이름')
    medical_center_id = NumberFilter(field_name='medical_center__id', label='병원 객체의 pk')
    department_name = CharFilter(field_name='name', label='부서 이름')
    department_id = NumberFilter(field_name='id', label='부서 객체의 pk')

    class Meta:
        model = Department
        fields = ['medical_center_name', 'medical_center_id', 'department_name', 'department_id']
class PersonFilter(FilterSet):
    city = ModelChoiceFilter(field_name='city', queryset=City.objects.all())
    address = CharFilter(field_name="address", lookup_expr='icontains')
    additional_info = CharFilter(field_name="additional_info",
                                 lookup_expr='icontains')

    class Meta:
        model = Person
        fields = ('city', 'address', 'additional_info')
class ConsultationFilter(FilterSet):
    category = CharFilter('category__code')
    district = CharFilter('clinic__district__code')
    language = CharFilter('doctor__language__code')
    price_range = NumberRangeFilter(field_name='price', lookup_expr='range')

    class Meta:
        model = Consultation
        fields = ['category', 'district', 'language', 'price_range']
Exemple #24
0
class ProbeInsertionFilter(FilterSet):
    subject = CharFilter('session__subject__nickname')
    date = CharFilter('session__start_time__date')
    experiment_number = CharFilter('session__number')
    name = CharFilter('name')
    session = UUIDFilter('session')

    class Meta:
        model = ProbeInsertion
        exclude = ['json']
class IndividualPersonFilter(PersonFilter):
    last_name = CharFilter(field_name="last_name", lookup_expr='icontains')
    first_name = CharFilter(field_name="first_name", lookup_expr='icontains')
    middle_name = CharFilter(field_name="middle_name", lookup_expr='icontains')
    inn = NumberFilter(field_name="inn", lookup_expr='icontains')

    class Meta(PersonFilter.Meta):
        model = IndividualPerson
        fields = ('last_name', 'first_name', 'middle_name',
                  'inn') + PersonFilter.Meta.fields
Exemple #26
0
class TitleFilter(FilterSet):
    """Title get params filtration"""
    category = CharFilter(field_name='category', lookup_expr='slug')
    genre = CharFilter(field_name='genre', lookup_expr='slug')
    name = CharFilter(field_name='name', lookup_expr='icontains')
    year = NumberFilter()

    class Meta:
        model = Title
        fields = ('genre', 'category', 'name', 'year')
Exemple #27
0
class ArticleFilter(FilterSet):
    user = NumberFilter(field_name='user')
    title = CharFilter(field_name='title', lookup_expr='contains')
    first_name = CharFilter(field_name='user__first_name',
                            lookup_expr='startswith')
    last_name = CharFilter(field_name='user__last_name',
                           lookup_expr='startswith')

    class Meta:
        model = Article
        fields = []
Exemple #28
0
class BooksFilter(FilterSet):
    """
    Custom filter for filtering on Book model.
    """
    name = CharFilter(field_name='name')
    publisher = CharFilter(field_name='publisher', lookup_expr='name')
    release_date = NumberFilter(field_name='released_date', lookup_expr='year')

    class Meta:
        model = Book
        fields = ['name']
Exemple #29
0
class CommentFilter(FilterSet):
    """
    A filter class for filtering comments
    """

    topic = CharFilter(name="topic__slug")
    user = CharFilter(name="user__id")

    class Meta:
        model = Comment
        fields = ['topic', 'user']
class TrainingDirectionFilter(FilterSet):
    code = CharFilter(field_name='code', lookup_expr='icontains')
    name = CharFilter(field_name='name', lookup_expr='icontains')
    
    class Meta:
        model = TrainingDirection
        fields = {
            'code':['exact'],
            'name': ['exact'],
            'type': ['exact', 'in'],
        }