Commit dfad726e authored by Isataev Adlet's avatar Isataev Adlet

Создал полностью CRUD для мероприятий

parent cbad5e75
...@@ -3,3 +3,4 @@ Django==3.2.9 ...@@ -3,3 +3,4 @@ Django==3.2.9
pytz==2021.3 pytz==2021.3
sqlparse==0.4.2 sqlparse==0.4.2
Pillow==8.4.0 Pillow==8.4.0
django-crispy-forms==1.13.0
...@@ -37,7 +37,8 @@ INSTALLED_APPS = [ ...@@ -37,7 +37,8 @@ INSTALLED_APPS = [
'django.contrib.sessions', 'django.contrib.sessions',
'django.contrib.messages', 'django.contrib.messages',
'django.contrib.staticfiles', 'django.contrib.staticfiles',
'webapp' 'webapp',
'crispy_forms'
] ]
MIDDLEWARE = [ MIDDLEWARE = [
...@@ -125,5 +126,7 @@ STATIC_URL = '/static/' ...@@ -125,5 +126,7 @@ STATIC_URL = '/static/'
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
CRISPY_TEMPLATE_PACK = 'bootstrap4'
MEDIA_ROOT = os.path.join(BASE_DIR, "uploads") MEDIA_ROOT = os.path.join(BASE_DIR, "uploads")
MEDIA_URL = "/uploads/" MEDIA_URL = "/uploads/"
...@@ -17,7 +17,14 @@ from django.conf import settings ...@@ -17,7 +17,14 @@ from django.conf import settings
from django.conf.urls.static import static from django.conf.urls.static import static
from django.contrib import admin from django.contrib import admin
from django.urls import path from django.urls import path
from webapp import views as webapp_views
urlpatterns = [ urlpatterns = [
path('admin/', admin.site.urls), path('admin/', admin.site.urls),
path("", webapp_views.index_view, name="index"),
path("events/", webapp_views.EventView.as_view(), name="list_events"),
path("events/create/", webapp_views.EventCreateView.as_view(), name="create_events"),
path("events/<int:pk>/", webapp_views.EventDetailView.as_view(), name="detail_events"),
path("events/<int:pk>/edit/", webapp_views.EventUpdateView.as_view(), name="update_events"),
path("events/<int:pk>/delete/", webapp_views.EventDeleteView.as_view(), name="delete_events")
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
from django import forms
from webapp.models import Event
class EventForm(forms.ModelForm):
date = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'YYYY-MM-DD HH-MM-SS'}))
class Meta:
model = Event
fields = ["place", "date"]
...@@ -21,7 +21,7 @@ class Event(models.Model): ...@@ -21,7 +21,7 @@ class Event(models.Model):
date = models.DateTimeField(verbose_name="Дата") date = models.DateTimeField(verbose_name="Дата")
def __str__(self): def __str__(self):
return f'{self.place}' return f'{self.place} - {self.date}'
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css"
integrity="sha384-B0vP5xmATw1+K9KRQjQERJvTumQW0nPEzvF6L/Z6nronJ3oUOFUFpCjEUQouq2+l" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.5.0/font/bootstrap-icons.css">
<title>{% block title %}{% endblock %}</title>
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<a class="navbar-brand" href="{% url 'index' %}">Speed Dating</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav"
aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item active">
<a class="nav-link" href="{% url 'list_events' %}">Мероприятия<span class="sr-only">(current)</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="{% url 'create_events' %}">Создать мероприятие</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Редактировать профиль</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Войти</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Регистрация</a>
</li>
</ul>
</div>
</nav>
<div class="container">
{% block content %}{% endblock %}
</div>
</body>
</html>
\ No newline at end of file
{% extends "base.html" %}
{% load crispy_forms_filters %}
{% block title %}Create Event{% endblock %}
{% block content %}
<h1>Создать Мероприятие</h1>
<form action="{% url "create_events" %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form|crispy }}
<button>Создать</button>
</form>
{% endblock %}
\ No newline at end of file
{% extends "base.html" %}
{% block title %}Delete {{ event.place }}{% endblock %}
{% block content %}
<h2>Удалить "{{ event.place }}"</h2>
<a href="{% url "list_events" %}">Cancel</a>
<form action="{% url "delete_events" event.pk %}" method="post">
{% csrf_token %}
<button>Yes</button>
</form>
{% endblock %}
\ No newline at end of file
{% extends 'base.html' %}
{% block title %}Events{% endblock %}
{% block content %}
{{ event.place.name }}
<img src="{{ event.place.photo.url }}" alt="">
{{ event.place.address }}
{{ event.place.description }}
{{ event.date }}
<a href="{% url "update_events" event.pk %}">Редактировать</a>
<a href="{% url "delete_events" event.pk %}">Удалить</a>
{% endblock %}
\ No newline at end of file
{% extends 'base.html' %}
{% block title %}Events{% endblock %}
{% block content %}
{% for event in events %}
<a href="{% url 'detail_events' event.pk %}">{{ event.place }}</a>
{{ event.date }}
<hr>
{% endfor %}
{% endblock %}
\ No newline at end of file
{% extends "base.html" %}
{% load crispy_forms_filters %}
{% block title %}Update Event{% endblock %}
{% block content %}
<h1>Редактировать Мероприятие</h1>
<form action="{% url "update_events" event.pk %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form|crispy }}
<button>Редактировать</button>
</form>
{% endblock %}
\ No newline at end of file
{% extends 'base.html' %}
{% block title %}Home{% endblock %}
{% block content %}
<div id="carouselExampleSlidesOnly" class="carousel slide" data-ride="carousel">
<div class="carousel-inner">
<div class="carousel-item active">
<img src="https://blogs.egu.eu/network/water-underground/files/2017/05/1-2-1400x800.jpg"
class="d-block w-100" alt="...">
</div>
<div class="carousel-item">
<img src="data:image/jpeg;base64,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"
class="d-block w-100" alt="...">
</div>
<div class="carousel-item">
<img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQSVVw81pDKgc8dERNylXcwyzXX0oNiSHyGqQ&usqp=CAU"
class="d-block w-100" alt="...">
</div>
</div>
</div>
<div>
<h1>Что такое Speed Dating</h1>
<p>
Участников, как правило, подбирают по равноценным социальным группам. Некоторые организаторы вводят
возрастные ограничения. На классической спид-дейтинг-вечеринке каждый участник будет иметь 10–15
встреч наедине с представителями противоположного пола. Девушки размещаются за столиками с номерами.
Мужчины через каждые 3–7 минут последовательно пересаживаются от одной девушки к другой. После каждой
встречи гости отмечают свои впечатления о собеседнике в «карте симпатий» или напрямую обмениваются
контактами. Далее организаторы сравнивают «карты симпатий», и, в случае совпадения «+»,
рассылают контакты участникам.
</p>
</div>
{% endblock %}
\ No newline at end of file
from django.shortcuts import render from django.shortcuts import render
from django.views.generic import ListView from django.urls import reverse, reverse_lazy
from django.views import View
from django.views.generic import CreateView, DetailView, UpdateView, DeleteView
from webapp.forms import EventForm
from webapp.models import Event from webapp.models import Event
class EventView(ListView): def index_view(request):
return render(request, "index.html")
class EventView(View):
def get(self, request, *args, **kwargs):
events = Event.objects.all()
context = {"events": events}
return render(request, "event_list.html", context)
class EventCreateView(CreateView):
model = Event
template_name = "event_create.html"
form_class = EventForm
def get_success_url(self):
return reverse("detail_events", kwargs={"pk": self.object.pk})
class EventDetailView(DetailView):
model = Event model = Event
template_name = "event_list.html" template_name = "event_detail.html"
ordering = ["date"] context_object_name = "event"
class EventUpdateView(UpdateView):
model = Event
template_name = "event_update.html"
form_class = EventForm
def get_success_url(self):
return reverse("detail_events", kwargs={"pk": self.object.pk})
class EventDeleteView(DeleteView):
model = Event
template_name = "event_delete.html"
success_url = reverse_lazy("list_events")
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment