From b7fa3af07cac614c1f186b96abbbdf8265e8b5ad Mon Sep 17 00:00:00 2001 From: Giovanni Nunes Date: Sun, 6 May 2018 16:39:32 -0300 Subject: [PATCH 1/2] =?UTF-8?q?coment=C3=A1rios=20nos=20eventos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- events/admin.py | 4 +++- events/forms.py | 10 ++++++++-- events/migrations/0002_comment.py | 26 ++++++++++++++++++++++++++ events/models.py | 17 +++++++++++++++-- events/templates/show.html | 17 +++++++++++++++++ events/views.py | 16 +++++++++------- 6 files changed, 78 insertions(+), 12 deletions(-) create mode 100644 events/migrations/0002_comment.py diff --git a/events/admin.py b/events/admin.py index d3da781..026a977 100644 --- a/events/admin.py +++ b/events/admin.py @@ -1,5 +1,5 @@ from django.contrib import admin -from .models import Event +from .models import Event, Comment # Register your models here. @admin.register(Event) @@ -11,3 +11,5 @@ class EventAdmin(admin.ModelAdmin): list_filter = ("date", "priority", ) list_editable = ("priority", ) search_fields = ("event", "date", ) + +admin.site.register(Comment) diff --git a/events/forms.py b/events/forms.py index f4f910b..6180210 100644 --- a/events/forms.py +++ b/events/forms.py @@ -1,8 +1,14 @@ from django import forms -from .models import Event +from .models import Event, Comment class EventForm(forms.ModelForm): """Formulário utilizado para a inserção de novos eventos.""" class Meta: model = Event - fields = ['date', 'event', 'priority'] + fields = ['date', 'event', 'priority',] + +class CommentForm(forms.ModelForm): + """Formulário usado para a inserção de comentários em um evento.""" + class Meta: + model = Comment + fields = ['text', 'author', 'email',] diff --git a/events/migrations/0002_comment.py b/events/migrations/0002_comment.py new file mode 100644 index 0000000..650ff9e --- /dev/null +++ b/events/migrations/0002_comment.py @@ -0,0 +1,26 @@ +# Generated by Django 2.0.4 on 2018-05-06 16:37 + +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('events', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Comment', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('author', models.CharField(max_length=80)), + ('email', models.EmailField(max_length=254)), + ('text', models.CharField(max_length=160)), + ('commented', models.DateTimeField(default=django.utils.timezone.now)), + ('event', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='comment_event', to='events.Event')), + ], + ), + ] diff --git a/events/models.py b/events/models.py index 6e0deb9..0d6c13c 100644 --- a/events/models.py +++ b/events/models.py @@ -1,9 +1,10 @@ from django.db import models +from django.utils import timezone # Create your models here. - - class Event(models.Model): + """Classe contendo o evento propriamente dito, sua data, descrição + e também prioridade.""" priorities_list = ( ('0', 'Sem prioridade'), @@ -19,3 +20,15 @@ class Event(models.Model): def __str__(self): return self.event + +class Comment(models.Model): + """Comentários efetuados em um determinado evento.""" + + author = models.CharField(max_length=80) + email = models.EmailField() + text = models.CharField(max_length=160) + commented = models.DateTimeField(default=timezone.now) + event = models.ForeignKey(Event, on_delete=models.CASCADE, related_name='comment_event') + + def __str__(self): + return "{} em {:%c}".format(self.author, self.commented) diff --git a/events/templates/show.html b/events/templates/show.html index ca8cf9c..8ff2323 100644 --- a/events/templates/show.html +++ b/events/templates/show.html @@ -19,6 +19,23 @@

Evento Nº{{ event.id }}

{{ event.event }} + {% if comments|length > 0 %} +
+ {% for comment in comments %} +
+
+

{{ comment.text }}

+
{{ comment.author }} comentou em {{ comment.commented }}
+
+
+ {% endfor %} + {% else %} +
+ Não há comentários para este evento! Seja o primeiro a comentar! +
+ {% endif %} +
+
diff --git a/events/views.py b/events/views.py index 623fe28..5e871b9 100644 --- a/events/views.py +++ b/events/views.py @@ -2,14 +2,14 @@ from django.shortcuts import get_object_or_404, redirect, render from django.utils.timezone import localdate from django.views.defaults import bad_request, server_error -from .models import Event -from .forms import EventForm +from .models import Event, Comment +from .forms import EventForm, CommentForm from datetime import datetime, timedelta def split_date(string_date): - """transforma a data em YYYY-MM-DD em uma tupla de três valores para + """Transforma a data em YYYY-MM-DD em uma tupla de três valores para utilizar na visão de eventos de um determinado dia.""" for value in string_date.split('-'): yield int(value) @@ -17,16 +17,15 @@ def split_date(string_date): # Create your views here. def index(request): + """Exibe a página principal da aplicaão.""" context = { - 'priorities': Event.priorities_list, - 'today': localdate(), 'hide_new_button': 'true', + 'priorities': Event.priorities_list, + 'today': localdate(), } return render(request, 'index.html', context) -def ops(request): - return render(request, 'ops.html') def all(request): """Exibe todas os eventos consolidados em uma única página, não recebe @@ -104,6 +103,9 @@ def show(request, id: int): event = get_object_or_404(Event, id=id) context = { 'event': event, + 'comments': Comment.objects.filter(event=id).order_by('-commented'), + 'form': CommentForm(), + 'hide_new_button': 'true', 'priorities': Event.priorities_list, 'today': localdate(), } From 8cd43d726690454d2ffb91d66e56f813410469ed Mon Sep 17 00:00:00 2001 From: Giovanni Nunes Date: Wed, 9 May 2018 22:32:42 -0300 Subject: [PATCH 2/2] =?UTF-8?q?inclus=C3=A3o=20da=20op=C3=A7=C3=A3o=20de?= =?UTF-8?q?=20coment=C3=A1rios?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- events/forms.py | 2 +- events/models.py | 13 ++++++++++- events/templates/day.html | 13 ++++++++++- events/templates/new.html | 2 +- events/templates/show.html | 44 ++++++++++++++++++++++++++++---------- events/views.py | 17 +++++++++------ requirements.txt | 2 +- 7 files changed, 71 insertions(+), 22 deletions(-) diff --git a/events/forms.py b/events/forms.py index 6180210..90b8d75 100644 --- a/events/forms.py +++ b/events/forms.py @@ -11,4 +11,4 @@ class CommentForm(forms.ModelForm): """Formulário usado para a inserção de comentários em um evento.""" class Meta: model = Comment - fields = ['text', 'author', 'email',] + fields = ['text', 'author', 'email', 'event'] diff --git a/events/models.py b/events/models.py index 0d6c13c..b49fbeb 100644 --- a/events/models.py +++ b/events/models.py @@ -1,5 +1,6 @@ from django.db import models from django.utils import timezone +from libgravatar import Gravatar # Create your models here. class Event(models.Model): @@ -17,6 +18,10 @@ class Event(models.Model): event = models.CharField(max_length=80) priority = models.CharField(max_length=1, choices=priorities_list) + def number_of_comments(self): + """Retorna a quantidade de comentários dentro de um evento.""" + return self.comment_event.count() + def __str__(self): return self.event @@ -30,5 +35,11 @@ class Comment(models.Model): commented = models.DateTimeField(default=timezone.now) event = models.ForeignKey(Event, on_delete=models.CASCADE, related_name='comment_event') + def avatar(self): + """Retorna a partir do endereço de e-mail, um avatar + configurado no Gravatar ou um dos avatares padrão deles.""" + g = Gravatar(self.email) + return g.get_image(default='identicon') + def __str__(self): - return "{} em {:%c}".format(self.author, self.commented) + return "{} commentou em {:%c}".format(self.author, self.commented) diff --git a/events/templates/day.html b/events/templates/day.html index f5fbdb9..49ca591 100644 --- a/events/templates/day.html +++ b/events/templates/day.html @@ -25,7 +25,18 @@

{{ day.day }}

- diff --git a/events/templates/new.html b/events/templates/new.html index 9093877..3c1a243 100644 --- a/events/templates/new.html +++ b/events/templates/new.html @@ -1,5 +1,5 @@ - {% if hide_new_button != "true" %} + {% if hide_new_button != True %}
diff --git a/events/templates/show.html b/events/templates/show.html index 8ff2323..2793954 100644 --- a/events/templates/show.html +++ b/events/templates/show.html @@ -13,28 +13,50 @@

{{ event.date.day }}

-

Evento Nº{{ event.id }}