Initials
This commit is contained in:
12
events/admin.py
Normal file
12
events/admin.py
Normal 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
11
events/forms.py
Normal 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'}),
|
||||
}
|
||||
48
events/migrations/0001_initial.py
Normal file
48
events/migrations/0001_initial.py
Normal 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')),
|
||||
],
|
||||
),
|
||||
]
|
||||
0
events/migrations/__init__.py
Normal file
0
events/migrations/__init__.py
Normal file
42
events/models.py
Normal file
42
events/models.py
Normal 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
11
events/urls.py
Normal 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
28
events/views.py
Normal 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')
|
||||
Reference in New Issue
Block a user