diff --git a/manage_events/admin.py b/manage_events/admin.py index abaf588..39aae97 100644 --- a/manage_events/admin.py +++ b/manage_events/admin.py @@ -8,6 +8,7 @@ from .models import ( EventMaster, Event, EventPrincipalInteraction, + AgeGroups ) @@ -129,3 +130,4 @@ admin.site.register(Event, EventAdmin) admin.site.register(EventCategory, EventCategoryAdmin) admin.site.register(Venue, VenueAdmin) admin.site.register(EventMaster, EventMasterAdmin) +admin.site.register(AgeGroups) diff --git a/manage_events/api/serializers.py b/manage_events/api/serializers.py index 7ea484a..4529224 100644 --- a/manage_events/api/serializers.py +++ b/manage_events/api/serializers.py @@ -6,6 +6,7 @@ from taggit.models import Tag from manage_events.utils import get_location_info from accounts.api.serializers import ProfileSerializer from manage_events.models import ( + AgeGroups, EventMaster, Event, EventCategory, @@ -49,6 +50,10 @@ class EventCategorySerializer(serializers.ModelSerializer): model = EventCategory fields = ["id", "title", "image", "description", "video_url"] +class AgeGroupsSerializer(serializers.ModelSerializer): + class Meta: + model = AgeGroups + fields = ['id', 'name'] class EventListSerializer(serializers.ModelSerializer): category = EventCategorySerializer(read_only=True) diff --git a/manage_events/api/urls.py b/manage_events/api/urls.py index 1f657d3..ad715ce 100644 --- a/manage_events/api/urls.py +++ b/manage_events/api/urls.py @@ -129,6 +129,11 @@ urlpatterns = [ name="capture_event_share", ), + path( + "age-groups/", views.AgeGroupListView.as_view(), + name="age_group_list" + ), + path( "events/", views.EventListView.as_view(), diff --git a/manage_events/api/views.py b/manage_events/api/views.py index 50e5468..860c65f 100644 --- a/manage_events/api/views.py +++ b/manage_events/api/views.py @@ -18,6 +18,7 @@ from rest_framework.permissions import IsAuthenticated from rest_framework_simplejwt.authentication import JWTAuthentication from manage_cms.api.serializers import TagSerializer from manage_events.api.serializers import ( + AgeGroupsSerializer, EventDateRangeSerializer, EventMasterSearchSerializer, EventMasterSerializer, @@ -32,6 +33,7 @@ from manage_events.api.serializers import ( EventListSerializer, ) from manage_events.models import ( + AgeGroups, EventInteractionType, EventMaster, Event, @@ -987,6 +989,18 @@ class EventShareView(APIView): status=status.HTTP_200_OK, ) +class AgeGroupListView(APIView): + authentication_classes = [JWTAuthentication] + permission_classes = [IsAuthenticated] + serializer_class = AgeGroupsSerializer + model = AgeGroups + + def get(self, request): + queryset = self.model.objects.filter(active=True) + serializer = self.serializer_class(queryset, many=True) + return ApiResponse.success(message=constants.SUCCESS, data=serializer.data) + + class EventListView(generics.ListAPIView): authentication_classes = [JWTAuthentication] permission_classes = [IsAuthenticated] diff --git a/manage_events/forms.py b/manage_events/forms.py index dc5777d..a406e5a 100644 --- a/manage_events/forms.py +++ b/manage_events/forms.py @@ -1,6 +1,6 @@ from django import forms from accounts.models import IAmPrincipal, IAmPrincipalExtendedData -from manage_events.models import EventImage, EventMaster, Event, EventCategory, Venue +from manage_events.models import AgeGroups, EventImage, EventMaster, Event, EventCategory, Venue from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ @@ -17,12 +17,6 @@ class EventCategoryForm(forms.ModelForm): class EventForm(forms.ModelForm): - AGE_GROUP_CHOICES = [ - ('18 & Under', '18 & Under'), - ('18-30', '18-30'), - ('30+', '30+'), - ('Family Event', 'Family Event'), - ] principal = forms.ModelChoiceField( queryset=IAmPrincipal.objects.select_related("extended_data").filter( extended_data__is_onboarded=True, @@ -38,7 +32,11 @@ class EventForm(forms.ModelForm): ) image = forms.ImageField(label="Thumbnail") event_images = forms.ImageField(label="Event Images") - age_group = forms.ChoiceField(choices=AGE_GROUP_CHOICES, label="Age Group", required=True) + age_group = forms.ModelChoiceField( + queryset=AgeGroups.objects.filter(active=True), + label="Age Group", + required=True + ) class Meta: model = Event @@ -96,6 +94,15 @@ class EventForm(forms.ModelForm): if event_images.exists(): self.fields['event_images'].initial = [image.image.url for image in event_images] + # Set the initial value for age_group if instance is provided + print(f"age group is {self.instance.age_group}") + if self.instance and self.instance.pk: + try: + self.fields['age_group'].initial = AgeGroups.objects.get(name=instance.age_group).id + print(f"field initials {self.fields['age_group'].initial}") + except AgeGroups.DoesNotExist: + pass + if principal_id: self.fields['venue'].queryset = Venue.objects.filter(principal_id=principal_id, active=True) else: diff --git a/manage_events/management/commands/populate_age_group.py b/manage_events/management/commands/populate_age_group.py new file mode 100644 index 0000000..b55cceb --- /dev/null +++ b/manage_events/management/commands/populate_age_group.py @@ -0,0 +1,20 @@ +from django.core.management.base import BaseCommand +from ...models import AgeGroups, Event +import random + +class Command(BaseCommand): + help = 'Populate the AgeGroup model with predefined age groups' + + def handle(self, *args, **kwargs): + age_groups = ["18-21", "21-30", "30-40", "40-50", "50+"] + for age in age_groups: + age_group, created = AgeGroups.objects.get_or_create(name=age) + if created: + self.stdout.write(self.style.SUCCESS(f'Age group "{age}" created.')) + else: + self.stdout.write(self.style.WARNING(f'Age group "{age}" already exists.')) + + # Update all Event objects with a random age group + for event in Event.objects.all(): + event.age_group = random.choice(age_groups) + event.save() diff --git a/manage_events/migrations/0016_alter_event_age_group.py b/manage_events/migrations/0016_alter_event_age_group.py new file mode 100644 index 0000000..e853f15 --- /dev/null +++ b/manage_events/migrations/0016_alter_event_age_group.py @@ -0,0 +1,19 @@ +# Generated by Django 5.0.2 on 2024-07-17 10:51 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('manage_events', '0015_agegroups'), + ] + + operations = [ + migrations.AlterField( + model_name='event', + name='age_group', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='manage_events.agegroups'), + ), + ] diff --git a/manage_events/migrations/0017_alter_event_age_group.py b/manage_events/migrations/0017_alter_event_age_group.py new file mode 100644 index 0000000..8f62c33 --- /dev/null +++ b/manage_events/migrations/0017_alter_event_age_group.py @@ -0,0 +1,18 @@ +# Generated by Django 5.0.2 on 2024-07-17 10:51 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('manage_events', '0016_alter_event_age_group'), + ] + + operations = [ + migrations.AlterField( + model_name='event', + name='age_group', + field=models.CharField(blank=True, max_length=100, null=True), + ), + ]