Fix API and admin for location2025

This commit is contained in:
2025-08-30 04:12:55 +09:00
parent 596b7313dd
commit cb399f14bf
3 changed files with 139 additions and 14 deletions

View File

@ -24,7 +24,7 @@ import uuid
from rest_framework.exceptions import ValidationError as DRFValidationError
from django.db import transaction
from django.db.models import F,Sum
from django.db.models import F,Sum,Q
from rest_framework import viewsets, permissions, status
from rest_framework.decorators import action
from rest_framework.response import Response
@ -239,17 +239,49 @@ class NewEvent2Admin(admin.ModelAdmin):
class LocationViewSet(viewsets.ModelViewSet):
queryset=Location2025.objects.all()
serializer_class=LocationSerializer
filter_fields=["prefecture", "location_name"]
filter_fields=[
"event", "cp_name", "subcategory", "sub_loc_id",
"is_active", "hidden_location", "evaluation_value"
]
def get_queryset(self):
queryset = Location2025.objects.all()
# リクエストパラメータの確認
group_filter = self.request.query_params.get('group__contains')
event_filter = self.request.query_params.get('event')
subcategory_filter = self.request.query_params.get('subcategory')
has_photos_filter = self.request.query_params.get('has_photos')
has_videos_filter = self.request.query_params.get('has_videos')
tags_filter = self.request.query_params.get('tags__contains')
evaluation_filter = self.request.query_params.get('evaluation_value')
hidden_filter = self.request.query_params.get('hidden_location')
if group_filter:
# フィルタの適用
queryset = queryset.filter(group__contains=group_filter)
if event_filter:
queryset = queryset.filter(event_id=event_filter)
if subcategory_filter:
queryset = queryset.filter(subcategory__icontains=subcategory_filter)
if has_photos_filter == 'true':
queryset = queryset.exclude(photos__isnull=True).exclude(photos='')
elif has_photos_filter == 'false':
queryset = queryset.filter(Q(photos__isnull=True) | Q(photos=''))
if has_videos_filter == 'true':
queryset = queryset.exclude(videos__isnull=True).exclude(videos='')
elif has_videos_filter == 'false':
queryset = queryset.filter(Q(videos__isnull=True) | Q(videos=''))
if tags_filter:
queryset = queryset.filter(tags__icontains=tags_filter)
if evaluation_filter:
queryset = queryset.filter(evaluation_value=evaluation_filter)
if hidden_filter == 'true':
queryset = queryset.filter(hidden_location=True)
elif hidden_filter == 'false':
queryset = queryset.filter(hidden_location=False)
return queryset