Ошибки с моделями в django, создание приложения регистрации событий - PullRequest
0 голосов
/ 11 апреля 2020

Я создаю 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'),
]
...