mirror of https://github.com/doccano/doccano.git
pythonannotation-tooldatasetsactive-learningtext-annotationdatasetnatural-language-processingdata-labelingmachine-learning
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
26 lines
877 B
26 lines
877 B
from django.db.models import Count, Q
|
|
from django_filters.rest_framework import BooleanFilter, FilterSet
|
|
|
|
from .models import Example
|
|
|
|
|
|
class ExampleFilter(FilterSet):
|
|
confirmed = BooleanFilter(field_name='states', method='filter_by_state')
|
|
|
|
def filter_by_state(self, queryset, field_name, is_confirmed: bool):
|
|
queryset = queryset.annotate(
|
|
num_confirm=Count(
|
|
expression=field_name,
|
|
filter=Q(**{f'{field_name}__confirmed_by': self.request.user}) |
|
|
Q(project__collaborative_annotation=True)
|
|
)
|
|
)
|
|
if is_confirmed:
|
|
queryset = queryset.filter(num_confirm__gte=1)
|
|
else:
|
|
queryset = queryset.filter(num_confirm__lte=0)
|
|
return queryset
|
|
|
|
class Meta:
|
|
model = Example
|
|
fields = ('project', 'text', 'created_at', 'updated_at')
|