Я создаю django app
, что позволяет пользователям регистрироваться на разные события. Я создал одну регистрационную модель в .models
и добавил спецификации c views
, но у меня есть некоторые ошибки модели. Интересно, кто-нибудь может немного помочь? Я также не уверен на 100%, правильно ли я сделал весь код, потому что я новичок в django. Большое спасибо! Вот мой файл модели:
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
from django.urls import reverse
import datetime
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
date_posted = models.DateTimeField(default=timezone.now)
hardness_level = models.TextField(max_length=20, default='easy')
author = models.ForeignKey(User, on_delete=models.CASCADE)
location = models.CharField('location', max_length=150)
info = models.TextField()
starts = models.DateTimeField('Starts')
ends = models.DateTimeField('Ends')
arrive_when = models.DateTimeField('Arrival time', null=True, blank=True)
arrive_where = models.CharField('Arrival location', null=True, max_length=150, blank=True)
registration_starts = models.DateTimeField('Registration start')
registration_limit = models.IntegerField('Guest limit',
default=0,
choices=[(0, u"No limit")] + list(zip(range(1, 100), range(1, 100))),
on_delete=models.CASCADE())
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('post-detail', kwargs={'pk': self.pk})
class Meta:
verbose_name = "event"
verbose_name_plural = "events"
ordering = ['-starts']
def __str__(self):
if self.starts.date() != self.ends.date():
return u"%s, %s - %s" % (self.title,
self.starts.strftime("%a %H:%M"),
self.ends.strftime("%a %H:%M"))
else:
return u"%s, %s - %s" % (self.title,
self.starts.strftime("%H:%M"),
self.ends.strftime("%H:%M"))
def get_registrations(self):
return EventRegistration.objects.filter(event=self)
permissions = (
("add_training", "Can add training"),
)
class EventRegistration(models.Model):
event = models.ForeignKey(Post,verbose_name='Event')
user = models.ForeignKey(User,verbose_name='Attendee')
time_registered = models.DateTimeField()
def __str__(self):
return self.user.username
class Meta:
verbose_name = 'Attendee for event'
verbose_name_plural = 'Attendees for events'
ordering = ['time_registered', ]
unique_together = ('event', 'user')
def add_user_to_list_of_attendees(self, user):
registration = EventRegistration.objects.create(user=user,
event=self,
time_registered=timezone.now())
registration.add()
def remove_user_from_list_of_attendees(self, user):
registration = EventRegistration.objects.get(user=user, event=self)
registration.delete()
def save(self, *args, **kwargs):
if self.id is None and self.time_registered is None:
self.time_registered = datetime.datetime.now()
super(EventRegistration, self).save(*args, **kwargs)
Вот мой файл просмотров:
from django.shortcuts import render, redirect
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin, PermissionRequiredMixin
from .models import Post
from django.views.generic import (
ListView,
DetailView,
CreateView,
UpdateView,
DeleteView
)
def home(request):
context = {
'posts': Post.objects.all() #listi andmetest, saadud kasutajalt paneb contenti sisse
}
return render(request, 'training/home.html', context)
def event_add_attendance(request, pk):
this_event = Post.objects.get(pk=pk)
this_event.add_user_to_list_of_attendees(user=request.user)
return redirect('events:detail', pk=pk)
def event_cancel_attendance(request, pk):
this_event = Post.objects.get(pk=pk)
this_event.remove_user_from_list_of_attendees(request.user)
return redirect('events:detail', pk=pk)
class PostListView(ListView):
model = Post
template_name = 'training/home.html'
context_object_name = 'posts'
И, наконец, URL:
from django.urls import path
from .views import (
PostListView,
PostDetailView,
PostCreateView,
PostUpdateView,
PostDeleteView
)
from .import views
urlpatterns = [
path('', views.PostListView.as_view(), name='training-home'),
path('post/<int:pk>/', views.PostDetailView.as_view(), name='post-detail'),
path('post/new/', views.PostCreateView.as_view(), name='post-create'),
path('post/<int:pk>/update/', views.PostUpdateView.as_view(), name='post-update'),
path('post/<int:pk>/delete/', views.PostDeleteView.as_view(), name='post-delete'),
path('about/', views.about, name='training-about'),
path('post/<int:pk>/useradded', views.event_add_attendance(), name='add-user'),
path('post/<int:pk>/userdeleted', views.event_cancel_attendance(), name='delete-user'),
]