Skip to content

Commit

Permalink
Correção do erro de mesclagem em views.py
Browse files Browse the repository at this point in the history
  • Loading branch information
plainspooky committed May 12, 2018
2 parents 239cb98 + 8cd43d7 commit be93693
Show file tree
Hide file tree
Showing 8 changed files with 134 additions and 19 deletions.
4 changes: 3 additions & 1 deletion events/admin.py
Original file line number Diff line number Diff line change
@@ -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)
Expand All @@ -11,3 +11,5 @@ class EventAdmin(admin.ModelAdmin):
list_filter = ("date", "priority", )
list_editable = ("priority", )
search_fields = ("event", "date", )

admin.site.register(Comment)
10 changes: 8 additions & 2 deletions events/forms.py
Original file line number Diff line number Diff line change
@@ -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', 'event']
26 changes: 26 additions & 0 deletions events/migrations/0002_comment.py
Original file line number Diff line number Diff line change
@@ -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')),
],
),
]
28 changes: 26 additions & 2 deletions events/models.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
from django.db import models
from django.utils import timezone
from libgravatar import Gravatar

# 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'),
Expand All @@ -16,6 +18,28 @@ 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


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 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 "{} commentou em {:%c}".format(self.author, self.commented)
13 changes: 12 additions & 1 deletion events/templates/day.html
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,18 @@ <h1 class="display-4">{{ day.day }}</h1>
<div class="p-2 text-truncate">
<a class="text-dark edit-event" id="event-{{ event.id }}-{{ event.priority }}" href="#">{{ event.event }}</a>
</div>
<div class="p-2 ml-auto">
<div class="p-2">
<span class="badge badge-pill badge-dark">
<a href="{% url 'agenda-events-show' event.id %}" class="text-white mb-2">
{% if event.number_of_comments > 0 %}
{{ event.number_of_comments }} comentário{{ event.number_of_comments|pluralize }}
{% else %}
Comentar!
{% endif %}
</a>
</span>
</div>
<div class="p-2 ml-auto">
<a class="alert-link" href="{% url 'agenda-events-delete' event.id %}"><span class="oi oi-pencil">&times;</span></a>
</div>
</div>
Expand Down
43 changes: 41 additions & 2 deletions events/templates/show.html
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,51 @@ <h1 class="display-4">{{ event.date.day }}</h1>
</div>
</div>
<div class="card-body">
<h1>Evento <small>N&ordm;{{ event.id }}</small></h1>
<div role="alert" class="d-flex alert {% if event.priority == '1' %} alert-success{% elif event.priority == '2' %} alert-warning{% elif event.priority == '3' %} alert-danger{% else %} alert-secondary{% endif %}">
<div class="p-2 text-truncate">
<div class="p-2 text-truncated">
{{ event.event }}
</div>
</div>
{% if comments|length > 0 %}
<div class="container py-2">
{% for comment in comments %}
<div class="media mb-2">
<img class="mr-3" src="{{ comment.avatar }}">
<div class="media-body">
<blockquote class="blockquote">&quot;{{ comment.text }}&quot;</blockquote>
<footer class="blockquote-footer"><strong>{{ comment.author }}</strong> | {{ comment.commented }}</footer>
</div>
</div>
{% endfor %}
</div>
{% else %}
<div class="alert alert-secondary text-center">
Não há comentários para este evento! Seja o primeiro a comentar!
</div>
{% endif %}
<hr/>
<div class="container">
<form method="post" action="">
{% csrf_token %}
<input type="hidden" name="event" value="{{ event.id }}">
<div class="form-group">
<input type="text" class="form-control form-control-sm" id="addInputComment" name="text" placeholder="Escreva seu comentário" required>
</div>
<div class="form-row">
<div class="col-auto">
<input type="text" class="form-control form-control-sm mb-2" id="addInputAuthor" name="author" placeholder="Escreva seu nome" required>
</div>
<div class="col-auto">
<div class="input-group mb-2">
<input type="email" class="form-control form-control-sm" id="addInputMail" name="email" placeholder="Escreva seu e-mail" required>
</div>
</div>
<div class="col-auto mb-2">
<button type="submit" class="btn btn-sm btn-primary mb-2">Enviar comentário</button>
</div>
</div>
</form>
</div>
</div>
</div>
</main>
Expand Down
27 changes: 17 additions & 10 deletions events/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,32 +2,30 @@
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)


# 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
parâmetros."""
Expand Down Expand Up @@ -83,7 +81,6 @@ def edit(request):
else:
return bad_request(request, None, 'ops_400.html')

# def error():

def new(request):
"""Recebe os dados de um novo evento via POST, faz a validação dos dados
Expand All @@ -100,10 +97,20 @@ def new(request):


def show(request, id: int):
"""Visualização de um determinado evento, recebe o 'id' do evento."""
"""Visualização de um determinado evento e de seus comentários, recebe
o 'id' do evento. Caso seja acessado via POST insere um novo comentário."""
event = get_object_or_404(Event, id=id)

if request.method == "POST":
form = CommentForm(request.POST)
if form.is_valid:
form.save()
return redirect('agenda-events-show', id=id)

context = {
'event': event,
'comments': Comment.objects.filter(event=id).order_by('-commented'),
'hide_new_button': True,
'priorities': Event.priorities_list,
'today': localdate(),
}
Expand Down
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
Django==2.0.4
pkg-resources==0.0.0
libgravatar==0.2.3
pytz==2018.4

0 comments on commit be93693

Please sign in to comment.