API debugging 1 まだ問題あり

This commit is contained in:
2024-07-26 04:03:15 +00:00
parent c0fb177d02
commit 9215ba8f9f
4 changed files with 339 additions and 98 deletions

View File

@ -0,0 +1,19 @@
# Generated by Django 3.2.9 on 2024-07-25 01:21
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('rog', '0037_alter_member_team'),
]
operations = [
migrations.AlterField(
model_name='entry',
name='category',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rog.newcategory'),
),
]

View File

@ -369,40 +369,42 @@ class Entry(models.Model):
}) })
# メンバーの年齢と性別をチェック # メンバーの年齢と性別をチェック
if self.team and not self.team.members.exists(): if self.team: # and not self.team.members.exists():
raise ValidationError({'team': 'チームにメンバーが登録されていません。'}) members = self.team.members.all() # membersを適切に取得
if not members.exists():
raise ValidationError({'team': 'チームにメンバーが登録されていません。'})
#members = Member.objects.filter(team=self.team) #members = Member.objects.filter(team=self.team)
#if not members.exists(): #if not members.exists():
# # ここで、owner をMemberに登録する。 Akira 2024-7-24 # # ここで、owner をMemberに登録する。 Akira 2024-7-24
# raise ValidationError("チームにメンバーが登録されていません。") # raise ValidationError("チームにメンバーが登録されていません。")
adults = [m for m in members if self.is_adult(m.user.date_of_birth)] adults = [m for m in members if self.is_adult(m.user.date_of_birth)]
children = [m for m in members if self.is_child(m.user.date_of_birth)] children = [m for m in members if self.is_child(m.user.date_of_birth)]
teenagers = [m for m in members if self.is_teenager(m.user.date_of_birth)] teenagers = [m for m in members if self.is_teenager(m.user.date_of_birth)]
if self.category.family: if self.category.family:
if not (adults and children): if not (adults and children):
raise ValidationError("ファミリーカテゴリーには、18歳以上のメンバーと小学生以下のメンバーが各1名以上必要です。") raise ValidationError("ファミリーカテゴリーには、18歳以上のメンバーと小学生以下のメンバーが各1名以上必要です。")
else: else:
if not adults: if not adults:
raise ValidationError("18歳以上のメンバーが1名以上必要です。") raise ValidationError("18歳以上のメンバーが1名以上必要です。")
if children: if children:
raise ValidationError("ファミリーカテゴリー以外では、小学生以下のメンバーは参加できません。") raise ValidationError("ファミリーカテゴリー以外では、小学生以下のメンバーは参加できません。")
if self.category.num_of_member == 1: if self.category.num_of_member == 1:
if len(members) != 1: if len(members) != 1:
raise ValidationError("このカテゴリーはソロ参加のみ可能です。") raise ValidationError("このカテゴリーはソロ参加のみ可能です。")
if not adults: if not adults:
raise ValidationError("ソロ参加は18歳以上のみ可能です。") raise ValidationError("ソロ参加は18歳以上のみ可能です。")
if self.category.female and not members[0].user.female: if self.category.female and not members[0].user.female:
raise ValidationError("このカテゴリーは女性のみ参加可能です。") raise ValidationError("このカテゴリーは女性のみ参加可能です。")
if not self.category.female and members[0].user.female: if not self.category.female and members[0].user.female:
raise ValidationError("このカテゴリーは男性のみ参加可能です。") raise ValidationError("このカテゴリーは男性のみ参加可能です。")
if len(members) > self.category.num_of_member: if len(members) > self.category.num_of_member:
raise ValidationError(f"このカテゴリーは{self.category.num_of_member}名までの参加が必要です。") raise ValidationError(f"このカテゴリーは{self.category.num_of_member}名までの参加が必要です。")
def save(self, *args, **kwargs): def save(self, *args, **kwargs):

View File

@ -18,6 +18,9 @@ from .utils import send_activation_email
from .models import TestModel from .models import TestModel
import logging import logging
from django.shortcuts import get_object_or_404
from django.utils import timezone
from datetime import datetime, date
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -221,9 +224,10 @@ class NewEventSerializer(serializers.ModelSerializer):
fields = ['event_name', 'start_datetime', 'end_datetime'] fields = ['event_name', 'start_datetime', 'end_datetime']
class TeamSerializer(serializers.ModelSerializer): class TeamSerializer(serializers.ModelSerializer):
#category = serializers.PrimaryKeyRelatedField(queryset=NewCategory.objects.all()) category = serializers.PrimaryKeyRelatedField(queryset=NewCategory.objects.all())
category = NewCategorySerializer(read_only=True) #category = serializers.IntegerField()
#category = NewCategorySerializer(read_only=True)
#category_id = serializers.PrimaryKeyRelatedField( #category_id = serializers.PrimaryKeyRelatedField(
# queryset=NewCategory.objects.all(), # queryset=NewCategory.objects.all(),
# source='category', # source='category',
@ -239,32 +243,60 @@ class TeamSerializer(serializers.ModelSerializer):
def to_representation(self, instance): def to_representation(self, instance):
ret = super().to_representation(instance) ret = super().to_representation(instance)
ret['category'] = { if instance.category:
'id': instance.category.id, ret['category'] = {
'category_name': instance.category.category_name, 'id': instance.category.id,
'category_number': instance.category.category_number 'category_name': instance.category.category_name,
} 'category_number': instance.category.category_number
}
else:
ret['category'] = None
ret['owner'] = CustomUserSerializer(instance.owner).data ret['owner'] = CustomUserSerializer(instance.owner).data
return ret return ret
def validate_category(self, value): def validate_category(self, value):
if not NewCategory.objects.filter(id=value.id).exists(): if not isinstance(value, NewCategory):
raise serializers.ValidationError("Invalid category ID.") raise serializers.ValidationError("Invalid category")
return value return value
#if not NewCategory.objects.filter(id=value).exists():
# raise serializers.ValidationError("Invalid category ID")
#return value
def create(self, validated_data): def create(self, validated_data):
category = validated_data.pop('category') return Team.objects.create(**validated_data)
team = Team.objects.create(category=category, **validated_data)
return team #category_id = validated_data.pop('category')
#category = get_object_or_404(NewCategory, id=category_id)
#team = Team.objects.create(category=category, **validated_data)
#team.category = category
#return team
#category = validated_data.pop('category')
#team = Team.objects.create(category=category, **validated_data)
#return team
#logger.debug(f"Creating team with data: {validated_data}") #logger.debug(f"Creating team with data: {validated_data}")
#validated_data['owner'] = self.context['request'].user #validated_data['owner'] = self.context['request'].user
#return super().create(validated_data) #return super().create(validated_data)
def update(self, instance, validated_data): def update(self, instance, validated_data):
if 'category' in validated_data: for attr, value in validated_data.items():
instance.category = validated_data.pop('category') setattr(instance, attr, value)
return super().update(instance, validated_data) instance.save()
return instance
#if 'category' in validated_data:
# category_id = validated_data.pop('category')
# category = get_object_or_404(NewCategory, id=category_id)
# instance.category = category
#return super().update(instance, validated_data)
#if 'category' in validated_data:
# instance.category = validated_data.pop('category')
#return super().update(instance, validated_data)
class CategorySerializer(serializers.ModelSerializer): class CategorySerializer(serializers.ModelSerializer):
class Meta: class Meta:
@ -273,27 +305,98 @@ class CategorySerializer(serializers.ModelSerializer):
class EntrySerializer(serializers.ModelSerializer): class EntrySerializer(serializers.ModelSerializer):
team = serializers.PrimaryKeyRelatedField(queryset=Team.objects.all()) team = serializers.PrimaryKeyRelatedField(queryset=Team.objects.all())
event = serializers.PrimaryKeyRelatedField(queryset=NewEvent.objects.all()) event = serializers.PrimaryKeyRelatedField(queryset=NewEvent2.objects.all())
category = serializers.PrimaryKeyRelatedField(queryset=NewCategory.objects.all()) category = serializers.PrimaryKeyRelatedField(queryset=NewCategory.objects.all())
owner = serializers.PrimaryKeyRelatedField(read_only=True) owner = serializers.PrimaryKeyRelatedField(read_only=True)
date = serializers.DateTimeField(input_formats=['%Y-%m-%d'])
#date = serializers.DateTimeField(default_timezone=timezone.get_current_timezone())
class Meta: class Meta:
model = Entry model = Entry
fields = ['id','team', 'event', 'category', 'date','owner'] fields = ['id','team', 'event', 'category', 'date','owner']
read_only_fields = ['id','owner']
def validate_date(self, value):
if isinstance(value, str):
try:
value = datetime.strptime(value, "%Y-%m-%d")
except ValueError:
raise serializers.ValidationError("Invalid date format. Use YYYY-MM-DD.")
if isinstance(value, date):
value = datetime.combine(value, datetime.min.time())
if timezone.is_naive(value):
return timezone.make_aware(value, timezone.get_current_timezone())
return value
#if isinstance(value, date):
# # dateオブジェクトをdatetimeオブジェクトに変換
# value = datetime.combine(value, datetime.min.time())
#if timezone.is_naive(value):
# return timezone.make_aware(value, timezone.get_current_timezone())
#return value
def validate_team(self, value): def validate_team(self, value):
if not value.members.exists(): if not value.members.exists():
raise serializers.ValidationError("チームにメンバーが登録されていません。") raise serializers.ValidationError("チームにメンバーが登録されていません。")
return value return value
def validate_date(self, value):
if isinstance(value, datetime):
return value.date()
return value
def validate(self, data):
team = data.get('team')
event = data.get('event')
category = data.get('category')
entry_date = data.get('date')
owner = self.context['request'].user
# Check if team, event, and category exist
if not Team.objects.filter(id=team.id).exists():
raise serializers.ValidationError("指定されたチームは存在しません。")
if not NewEvent2.objects.filter(id=event.id).exists():
raise serializers.ValidationError("指定されたイベントは存在しません。")
if not NewCategory.objects.filter(id=category.id).exists():
raise serializers.ValidationError("指定されたカテゴリーは存在しません。")
# Check for unique constraint
if Entry.objects.filter(team=team, event=event, date__date=entry_date, owner=owner).exists():
raise serializers.ValidationError("既に登録済みです。")
return data
def to_internal_value(self, data):
# dateフィールドが文字列で来た場合の処理
if 'date' in data and isinstance(data['date'], str):
try:
# 文字列をdatetimeオブジェクトに変換
data['date'] = datetime.strptime(data['date'], "%Y-%m-%d")
except ValueError:
raise serializers.ValidationError({"date": "無効な日付形式です。YYYY-MM-DD形式を使用してください。"})
return super().to_internal_value(data)
def to_representation(self, instance): def to_representation(self, instance):
ret = super().to_representation(instance) ret = super().to_representation(instance)
ret['team'] = instance.team.team_name if isinstance(ret['date'], datetime):
ret['event'] = instance.event.event_name ret['date'] = ret['date'].date().isoformat()
ret['category'] = instance.category.category_name
ret['owner'] = instance.owner.email
return ret return ret
#def to_representation(self, instance):
# ret = super().to_representation(instance)
# ret['team'] = instance.team.team_name
# ret['event'] = instance.event.event_name
# ret['category'] = instance.category.category_name
# ret['owner'] = instance.owner.email
# return ret
class CustomUserSerializer(serializers.ModelSerializer): class CustomUserSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = CustomUser model = CustomUser
@ -326,6 +429,15 @@ class UserUpdateSerializer(serializers.ModelSerializer):
instance.save() instance.save()
return instance return instance
class MemberCreationSerializer(serializers.Serializer):
#email = serializers.EmailField()
email = serializers.EmailField(allow_blank=True, required=False)
firstname = serializers.CharField(required=False)
lastname = serializers.CharField(required=False)
date_of_birth = serializers.DateField(required=False)
female = serializers.BooleanField(required=False)
class MemberWithUserSerializer(serializers.ModelSerializer): class MemberWithUserSerializer(serializers.ModelSerializer):
user = UserSerializer(read_only=True) user = UserSerializer(read_only=True)
@ -335,7 +447,7 @@ class MemberWithUserSerializer(serializers.ModelSerializer):
fields = ['user', 'team'] fields = ['user', 'team']
class MemberSerializer(serializers.ModelSerializer): class MemberSerializer(serializers.ModelSerializer):
user = CustomUserSerializer() user = CustomUserSerializer(read_only=True)
team = TeamDetailSerializer(read_only=True) team = TeamDetailSerializer(read_only=True)
#email = serializers.EmailField(write_only=True, required=False) #email = serializers.EmailField(write_only=True, required=False)
@ -347,50 +459,29 @@ class MemberSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = Member model = Member
fields = ['id','user','team'] # ,'email','firstname','lastname','date_of_birth','female'] fields = ['id','user','team'] # ,'email','firstname','lastname','date_of_birth','female']
#read_only_fields = ['id', 'team'] read_only_fields = ['id', 'team']
'''
def create(self, validated_data): def create(self, validated_data):
team = validated_data['team'] team = validated_data['team']
email = validated_data.get('email') email = validated_data.get('email')
if email:
user, created = CustomUser.objects.get_or_create(email=email)
if created:
user.firstname = validated_data.get('firstname', '')
user.lastname = validated_data.get('lastname', '')
user.date_of_birth = validated_data.get('date_of_birth')
user.female = validated_data.get('female', False)
user.is_active = False
user.activation_token = str(uuid.uuid4())
user.save()
activation_link = self.context['request'].build_absolute_uri( if email.startswith('dummy_'):
reverse('user-activation', kwargs={'activation_token': user.activation_token}) user, _ = CustomUser.objects.get_or_create(
) email=email,
try: defaults={**user_data, 'is_active': True}
send_activation_email(user, activation_link) )
except Exception as e: else:
logger.error(f"アクティベーションメールの送信中にエラーが発生しました: {str(e)}") user, _ = CustomUser.objects.get_or_create(
# メール送信に失敗しても、ユーザー作成は続行します email=email,
defaults={**user_data, 'is_active': False}
else:
dummy_email = f"dummy_{uuid.uuid4()}@example.com"
user = CustomUser.objects.create(
email=dummy_email,
firstname=validated_data.get('firstname', ''),
lastname=validated_data.get('lastname', ''),
date_of_birth=validated_data.get('date_of_birth'),
female=validated_data.get('female', False),
is_active=True
) )
try:
member = Member.objects.create(user=user, team=team)
except IntegrityError:
# ユーザーがすでにチームのメンバーの場合
raise serializers.ValidationError("このユーザーは既にチームのメンバーです。")
member = Member.objects.create(user=user, **validated_data)
return member return member
'''
def update(self, instance, validated_data): def update(self, instance, validated_data):
user_data = validated_data.pop('user', {}) user_data = validated_data.pop('user', {})

View File

@ -30,7 +30,7 @@ from django.http import JsonResponse
from rest_framework.permissions import IsAuthenticated from rest_framework.permissions import IsAuthenticated
from django.contrib.gis.db.models import Extent, Union from django.contrib.gis.db.models import Extent, Union
from .serializers import TestSerialiser,NewEventSerializer,NewEvent2Serializer, TeamSerializer, NewCategorySerializer,CategorySerializer, EntrySerializer, MemberSerializer, TempUserSerializer, CustomUserSerializer,EntryMemberSerializer,EntryCreationSerializer from .serializers import TestSerialiser,NewEventSerializer,NewEvent2Serializer, TeamSerializer, NewCategorySerializer,CategorySerializer, EntrySerializer, MemberSerializer, TempUserSerializer, CustomUserSerializer,EntryMemberSerializer,MemberCreationSerializer,EntryCreationSerializer
from .models import TestModel from .models import TestModel
from django.shortcuts import get_object_or_404 from django.shortcuts import get_object_or_404
from django.db.models import F from django.db.models import F
@ -549,6 +549,25 @@ def CustomAreaNames(request):
class UserActivationView(APIView): class UserActivationView(APIView):
def get(self, request, activation_token):
try:
temp_user = TempUser.objects.get(verification_code=activation_token)
user = CustomUser.objects.create(
email=temp_user.email,
firstname=temp_user.firstname,
lastname=temp_user.lastname,
date_of_birth=temp_user.date_of_birth,
female=temp_user.female,
is_active=True
)
# Here you might want to add the user to the team they were invited to
temp_user.delete()
return Response({"message": "アカウントが正常にアクティベートされました。"}, status=status.HTTP_200_OK)
except TempUser.DoesNotExist:
return Response({"error": "無効なアクティベーショントークンです。"}, status=status.HTTP_400_BAD_REQUEST)
'''
def get(self, request, activation_token): def get(self, request, activation_token):
try: try:
user = CustomUser.objects.get(activation_token=activation_token, is_active=False) user = CustomUser.objects.get(activation_token=activation_token, is_active=False)
@ -558,6 +577,7 @@ class UserActivationView(APIView):
return Response({"message": "アカウントが正常にアクティベートされました。"}, status=status.HTTP_200_OK) return Response({"message": "アカウントが正常にアクティベートされました。"}, status=status.HTTP_200_OK)
except CustomUser.DoesNotExist: except CustomUser.DoesNotExist:
return Response({"error": "無効なアクティベーショントークンです。"}, status=status.HTTP_400_BAD_REQUEST) return Response({"error": "無効なアクティベーショントークンです。"}, status=status.HTTP_400_BAD_REQUEST)
'''
class ChangePasswordView(generics.UpdateAPIView): class ChangePasswordView(generics.UpdateAPIView):
""" """
@ -721,7 +741,7 @@ class CategoryListView(generics.ListAPIView):
''' '''
class EntryViewSet(viewsets.ModelViewSet): class EntryViewSet(viewsets.ModelViewSet):
queryset = Entry.objects.all() #queryset = Entry.objects.all()
serializer_class = EntrySerializer serializer_class = EntrySerializer
permission_classes = [permissions.IsAuthenticated] permission_classes = [permissions.IsAuthenticated]
@ -744,10 +764,14 @@ class EntryViewSet(viewsets.ModelViewSet):
headers = self.get_success_headers(serializer.data) headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
except DRFValidationError as e: except DRFValidationError as e:
return Response({"error": str(e)}, status=status.HTTP_400_BAD_REQUEST) return Response({'error': self.format_errors(e.detail)}, status=status.HTTP_400_BAD_REQUEST)
# except IntegrityError:
# return Response({'error': '既に登録済みです'}, status=status.HTTP_400_BAD_REQUEST)
except IntegrityError as e:
return Response({'error': f'データベースエラー: {str(e)}'}, status=status.HTTP_400_BAD_REQUEST)
#except ValidationError as e: except Exception as e:
# return Response({'error': str(e)}, status=status.HTTP_400_BAD_REQUEST) return Response({'error': f"予期せぬエラーが発生しました: {str(e),'type': str(type(e))}"}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def perform_create(self, serializer): def perform_create(self, serializer):
serializer.save(owner=self.request.user) serializer.save(owner=self.request.user)
@ -765,14 +789,88 @@ class EntryViewSet(viewsets.ModelViewSet):
self.perform_destroy(instance) self.perform_destroy(instance)
return Response(status=status.HTTP_204_NO_CONTENT) return Response(status=status.HTTP_204_NO_CONTENT)
def get_error_message(self, exception):
if hasattr(exception, 'detail'):
if isinstance(exception.detail, dict):
return '. '.join([f"{key}: {', '.join(value)}" for key, value in exception.detail.items()])
elif isinstance(exception.detail, list):
return '. '.join(exception.detail)
return str(exception)
def format_errors(self, errors):
if isinstance(errors, list):
return '. '.join(errors)
elif isinstance(errors, dict):
return '. '.join([f"{key}: {value}" if isinstance(value, str) else f"{key}: {', '.join(value)}" for key, value in errors.items()])
else:
return str(errors)
class MemberViewSet(viewsets.ModelViewSet): class MemberViewSet(viewsets.ModelViewSet):
serializer_class = MemberSerializer #serializer_class = MemberSerializer
permission_classes = [permissions.IsAuthenticated,IsTeamOwner] permission_classes = [permissions.IsAuthenticated,IsTeamOwner]
def get_serializer_class(self):
if self.action == 'create':
return MemberCreationSerializer
return MemberSerializer
def get_queryset(self): def get_queryset(self):
team_id = self.kwargs['team_id'] team_id = self.kwargs['team_id']
return Member.objects.filter(team_id=team_id) return Member.objects.filter(team_id=team_id)
def create(self, request, *args, **kwargs):
team = Team.objects.get(id=self.kwargs['team_id'])
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
email = serializer.validated_data.get('email', '')
user_data = {
'firstname': serializer.validated_data.get('firstname', ''),
'lastname': serializer.validated_data.get('lastname', ''),
'date_of_birth': serializer.validated_data.get('date_of_birth'),
'female': serializer.validated_data.get('female', False),
'is_active': True
}
if not email or email.startswith('dummy_'):
# 直接登録
if email:
user, created = CustomUser.objects.get_or_create(
email=email,
defaults=user_data
)
else:
# emailが空の場合、一意のダミーメールアドレスを生成
dummy_email = f"dummy_{uuid.uuid4()}@example.com"
user = CustomUser.objects.create(email=dummy_email, **user_data)
member = Member.objects.create(user=user, team=team)
return Response(MemberSerializer(member).data, status=status.HTTP_201_CREATED)
#member = serializer.save(team=team)
#return Response(serializer.data, status=status.HTTP_201_CREATED)
else:
# 仮登録
existing_user = CustomUser.objects.filter(email=email).first()
if existing_user:
# 既存ユーザーの場合、チーム招待メールを送信
self.send_invitation_email(existing_user, team)
return Response({"message": "Invitation sent to existing user."}, status=status.HTTP_200_OK)
else:
print("新規ユーザー")
# 新規ユーザーの場合、TempUserを作成してアクティベーションメールを送信
temp_user = TempUser.objects.create(
email=email,
**user_data,
verification_code=str(uuid.uuid4())
)
self.send_activation_email(temp_user, team)
return Response({"message": "Verification email sent to the user."}, status=status.HTTP_201_CREATED)
'''
def create(self, request, *args, **kwargs): def create(self, request, *args, **kwargs):
team = Team.objects.get(id=self.kwargs['team_id']) team = Team.objects.get(id=self.kwargs['team_id'])
serializer = self.get_serializer(data=request.data) serializer = self.get_serializer(data=request.data)
@ -788,6 +886,37 @@ class MemberViewSet(viewsets.ModelViewSet):
headers = self.get_success_headers(serializer.data) headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
'''
def send_activation_email(self, temp_user, team):
# アクティベーションメール送信のロジックをここに実装
# 注意: 'user-activation' URLパターンが存在しない場合は、適切なURLを生成する方法を検討する必要があります
activation_url = "dummy url" #f"{settings.FRONTEND_URL}/activate/{temp_user.verification_code}"
# ここでemailを送信するロジックを実装
print(f"Activation email would be sent to {temp_user.email} with URL: {activation_url}")
def send_invitation_email(self, user, team):
# チーム招待メール送信のロジック
#invitation_url = self.request.build_absolute_uri(
# reverse('team-invite', kwargs={'team_id': team.id, 'user_id': user.id})
#)
#subject = f"Invitation to join {team.name}"
#message = f"You have been invited to join the team {team.name}. Click here to accept: {invitation_url}"
#from_email = settings.DEFAULT_FROM_EMAIL
#recipient_list = [user.email]
#send_mail(subject, message, from_email, recipient_list)
# チーム招待メール送信のロジックをここに実装
# 注意: 'team-invitation' URLパターンが存在しない場合は、適切なURLを生成する方法を検討する必要があります
# 例えば、フロントエンドのURLを直接指定する方法など
invitation_url = "dummy url" #f"{settings.FRONTEND_URL}/team/{team.id}/invite"
# ここでemailを送信するロジックを実装
print(f"Invitation email would be sent to {user.email} with URL: {invitation_url}")
def perform_create(self, serializer): def perform_create(self, serializer):
@ -905,12 +1034,12 @@ class UserEntriesView(generics.ListAPIView):
# イベントのカテゴリーを取得するビュー # イベントのカテゴリーを取得するビュー
class EventCategoriesView(generics.ListAPIView): class EventCategoriesView(generics.ListAPIView):
serializer_class = CategorySerializer serializer_class = NewCategorySerializer
permission_classes = [IsAuthenticated] permission_classes = [IsAuthenticated]
def get_queryset(self): def get_queryset(self):
event_id = self.kwargs['event_id'] event_id = self.kwargs['event_id']
return Category.objects.filter(entry__event_id=event_id).distinct() return NewCategory.objects.filter(entry__event_id=event_id).distinct()
class RegisterView(APIView): class RegisterView(APIView):
def post(self, request): def post(self, request):