mirror of
https://github.com/ae-utbm/sith.git
synced 2025-07-11 04:19:25 +00:00
Use select2 for user picture identification
This commit is contained in:
@ -1,5 +1,12 @@
|
||||
from typing import Annotated
|
||||
|
||||
from annotated_types import MinLen
|
||||
from django.contrib.staticfiles.storage import staticfiles_storage
|
||||
from ninja import ModelSchema, Schema
|
||||
from django.db.models import Q
|
||||
from django.utils.text import slugify
|
||||
from haystack.query import SearchQuerySet
|
||||
from ninja import FilterSchema, ModelSchema, Schema
|
||||
from pydantic import AliasChoices, Field
|
||||
|
||||
from core.models import User
|
||||
|
||||
@ -12,10 +19,6 @@ class SimpleUserSchema(ModelSchema):
|
||||
fields = ["id", "nick_name", "first_name", "last_name"]
|
||||
|
||||
|
||||
class MarkdownSchema(Schema):
|
||||
text: str
|
||||
|
||||
|
||||
class UserProfileSchema(ModelSchema):
|
||||
"""The necessary information to show a user profile"""
|
||||
|
||||
@ -42,6 +45,42 @@ class UserProfileSchema(ModelSchema):
|
||||
return obj.profile_pict.get_download_url()
|
||||
|
||||
|
||||
class UserFilterSchema(FilterSchema):
|
||||
search: Annotated[str, MinLen(1)]
|
||||
exclude: list[int] | None = Field(
|
||||
None, validation_alias=AliasChoices("exclude", "exclude[]")
|
||||
)
|
||||
|
||||
def filter_search(self, value: str | None) -> Q:
|
||||
if not value:
|
||||
return Q()
|
||||
if len(value) < 4:
|
||||
# For small queries, full text search isn't necessary
|
||||
return (
|
||||
Q(first_name__istartswith=value)
|
||||
| Q(last_name__istartswith=value)
|
||||
| Q(nick_name__istartswith=value)
|
||||
)
|
||||
return Q(
|
||||
id__in=list(
|
||||
SearchQuerySet()
|
||||
.models(User)
|
||||
.autocomplete(auto=slugify(value).replace("-", " "))
|
||||
.order_by("-last_update")
|
||||
.values_list("pk", flat=True)
|
||||
)
|
||||
)
|
||||
|
||||
def filter_exclude(self, value: set[int] | None) -> Q:
|
||||
if not value:
|
||||
return Q()
|
||||
return ~Q(id__in=value)
|
||||
|
||||
|
||||
class MarkdownSchema(Schema):
|
||||
text: str
|
||||
|
||||
|
||||
class FamilyGodfatherSchema(Schema):
|
||||
godfather: int
|
||||
godchild: int
|
||||
|
Reference in New Issue
Block a user