音楽で楽しみましょう!-Let's have fun with music!-
Signed-off-by: Shin'ya Minazuki <shinyoukai@laidback.moe>
This commit is contained in:
parent
7c3206bf83
commit
54c6d22102
517 changed files with 637 additions and 639 deletions
33
api/funquail_api/common/mixins.py
Normal file
33
api/funquail_api/common/mixins.py
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
from django.db.models import Q
|
||||
from django.shortcuts import get_object_or_404
|
||||
from rest_framework import serializers
|
||||
|
||||
|
||||
class MultipleLookupDetailMixin:
|
||||
lookup_value_regex = "[^/]+"
|
||||
lookup_field = "composite"
|
||||
|
||||
def get_object(self):
|
||||
queryset = self.filter_queryset(self.get_queryset())
|
||||
|
||||
relevant_lookup = None
|
||||
value = None
|
||||
for lookup in self.url_lookups:
|
||||
field_validator = lookup["validator"]
|
||||
try:
|
||||
value = field_validator(self.kwargs["composite"])
|
||||
except serializers.ValidationError:
|
||||
continue
|
||||
else:
|
||||
relevant_lookup = lookup
|
||||
break
|
||||
get_query = relevant_lookup.get(
|
||||
"get_query", lambda value: Q(**{relevant_lookup["lookup_field"]: value})
|
||||
)
|
||||
query = get_query(value)
|
||||
obj = get_object_or_404(queryset, query)
|
||||
|
||||
# May raise a permission denied
|
||||
self.check_object_permissions(self.request, obj)
|
||||
|
||||
return obj
|
||||
Loading…
Add table
Add a link
Reference in a new issue