This commit is contained in:
Vivek P Prakash
2025-11-27 11:53:46 +05:30
commit aa40080012
50 changed files with 1135 additions and 0 deletions

12
events/admin.py Normal file
View File

@@ -0,0 +1,12 @@
from django.contrib import admin
from .models import Event, EventImages
@admin.register(Event)
class EventAdmin(admin.ModelAdmin):
list_display = ('id','name','start_date','end_date','event_type','event_status')
list_filter = ('event_status','event_type')
search_fields = ('name','place','district')
@admin.register(EventImages)
class EventImagesAdmin(admin.ModelAdmin):
list_display = ('id','event','is_primary')

11
events/forms.py Normal file
View File

@@ -0,0 +1,11 @@
from django import forms
from .models import Event
class EventForm(forms.ModelForm):
class Meta:
model = Event
exclude = ['created_date']
widgets = {
'start_date': forms.DateInput(attrs={'type':'date'}),
'end_date': forms.DateInput(attrs={'type':'date'}),
}

View File

@@ -0,0 +1,48 @@
# Generated by Django 4.2.21 on 2025-11-26 22:07
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
('master_data', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='Event',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created_date', models.DateField(auto_now_add=True)),
('name', models.CharField(max_length=200)),
('description', models.TextField()),
('start_date', models.DateField()),
('end_date', models.DateField()),
('latitude', models.DecimalField(decimal_places=6, max_digits=9)),
('longitude', models.DecimalField(decimal_places=6, max_digits=9)),
('pincode', models.CharField(max_length=10)),
('district', models.CharField(max_length=100)),
('state', models.CharField(max_length=100)),
('place', models.CharField(max_length=200)),
('is_bookable', models.BooleanField(default=False)),
('is_eventify_event', models.BooleanField(default=True)),
('outside_event_url', models.URLField(default='NA')),
('event_status', models.CharField(choices=[('created', 'Created'), ('cancelled', 'Cancelled'), ('pending', 'Pending'), ('completed', 'Completed'), ('postponed', 'Postponed')], default='pending', max_length=250)),
('cancelled_reason', models.TextField(default='NA')),
('event_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='master_data.eventtype')),
],
),
migrations.CreateModel(
name='EventImages',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('is_primary', models.BooleanField(default=False)),
('event_image', models.ImageField(upload_to='event_images')),
('event', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='events.event')),
],
),
]

View File

42
events/models.py Normal file
View File

@@ -0,0 +1,42 @@
from django.db import models
from master_data.models import EventType
class Event(models.Model):
created_date = models.DateField(auto_now_add=True)
name = models.CharField(max_length=200)
description = models.TextField()
start_date = models.DateField()
end_date = models.DateField()
latitude = models.DecimalField(max_digits=9, decimal_places=6)
longitude = models.DecimalField(max_digits=9, decimal_places=6)
pincode = models.CharField(max_length=10)
district = models.CharField(max_length=100)
state = models.CharField(max_length=100)
place = models.CharField(max_length=200)
is_bookable = models.BooleanField(default=False)
is_eventify_event = models.BooleanField(default=True)
outside_event_url = models.URLField(default='NA')
event_type = models.ForeignKey(EventType, on_delete=models.CASCADE)
event_status = models.CharField(max_length=250, choices=[
('created', 'Created'),
('cancelled', 'Cancelled'),
('pending', 'Pending'),
('completed', 'Completed'),
('postponed', 'Postponed'),
], default='pending')
cancelled_reason = models.TextField(default='NA')
def __str__(self):
return f"{self.name} ({self.start_date})"
class EventImages(models.Model):
event = models.ForeignKey(Event, on_delete=models.CASCADE)
is_primary = models.BooleanField(default=False)
event_image = models.ImageField(upload_to='event_images')
def __str__(self):
return f"{self.event_image}"

11
events/urls.py Normal file
View File

@@ -0,0 +1,11 @@
from django.urls import path
from . import views
app_name = 'events'
urlpatterns = [
path('', views.EventListView.as_view(), name='event_list'),
path('add/', views.EventCreateView.as_view(), name='event_add'),
path('<int:pk>/edit/', views.EventUpdateView.as_view(), name='event_edit'),
path('<int:pk>/delete/', views.EventDeleteView.as_view(), name='event_delete'),
]

28
events/views.py Normal file
View File

@@ -0,0 +1,28 @@
from django.views import generic
from django.urls import reverse_lazy
from .models import Event
from .forms import EventForm
from django.contrib.auth.mixins import LoginRequiredMixin
class EventListView(LoginRequiredMixin, generic.ListView):
model = Event
context_object_name = 'events'
template_name = 'events/event_list.html'
paginate_by = 10
class EventCreateView(LoginRequiredMixin, generic.CreateView):
model = Event
form_class = EventForm
template_name = 'events/event_form.html'
success_url = reverse_lazy('events:event_list')
class EventUpdateView(LoginRequiredMixin, generic.UpdateView):
model = Event
form_class = EventForm
template_name = 'events/event_form.html'
success_url = reverse_lazy('events:event_list')
class EventDeleteView(LoginRequiredMixin, generic.DeleteView):
model = Event
template_name = 'events/event_confirm_delete.html'
success_url = reverse_lazy('events:event_list')