Add basic quotes functionality
This commit is contained in:
parent
f8533fc819
commit
b9775ca672
12 changed files with 166 additions and 11 deletions
|
@ -1,3 +1,7 @@
|
|||
from django.contrib import admin
|
||||
from .models import Suggester, Author, Quote, Suggestion
|
||||
|
||||
# Register your models here.
|
||||
admin.site.register(Suggester)
|
||||
admin.site.register(Author)
|
||||
admin.site.register(Quote)
|
||||
admin.site.register(Suggestion)
|
||||
|
|
14
web/lazaro_quotes/forms.py
Normal file
14
web/lazaro_quotes/forms.py
Normal file
|
@ -0,0 +1,14 @@
|
|||
from django.forms import ModelForm, CharField, EmailField
|
||||
from .models import Suggestion
|
||||
|
||||
|
||||
class SuggestionForm(ModelForm):
|
||||
class Meta:
|
||||
model = Suggestion
|
||||
fields = ["text", "context", "author_name"]
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
self.fields['suggester_name'] = CharField(label='Tu nombre')
|
||||
self.fields['suggester_email'] = EmailField(label='Tu email')
|
50
web/lazaro_quotes/migrations/0001_initial.py
Normal file
50
web/lazaro_quotes/migrations/0001_initial.py
Normal file
|
@ -0,0 +1,50 @@
|
|||
# Generated by Django 5.1.3 on 2024-12-02 22:49
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Author',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(max_length=254)),
|
||||
('slug', models.CharField(max_length=24)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Suggester',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(max_length=254)),
|
||||
('email', models.EmailField(max_length=254, unique=True)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Quote',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('text', models.TextField()),
|
||||
('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='lazaro_quotes.author')),
|
||||
('suggester', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='lazaro_quotes.suggester')),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Suggestion',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('text', models.TextField()),
|
||||
('context', models.TextField(blank=True, null=True)),
|
||||
('author_name', models.CharField(max_length=254)),
|
||||
('suggester', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='lazaro_quotes.suggester')),
|
||||
],
|
||||
),
|
||||
]
|
|
@ -1,13 +1,39 @@
|
|||
from django.db import models
|
||||
|
||||
|
||||
class Suggester(models.Model):
|
||||
name = models.CharField(max_length=254)
|
||||
email = models.EmailField(max_length=254, unique=True)
|
||||
|
||||
def __str__(self):
|
||||
return self.email
|
||||
|
||||
|
||||
class Author(models.Model):
|
||||
name = models.CharField(max_length=254)
|
||||
slug = models.CharField(max_length=24)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
class Quote(models.Model):
|
||||
text = models.TextField()
|
||||
quoted_name = models.CharField(null=True, blank=True, max_length=254)
|
||||
author = models.ForeignKey(
|
||||
Author, on_delete=models.CASCADE)
|
||||
suggester = models.ForeignKey(
|
||||
Suggester, on_delete=models.SET_NULL, null=True, blank=True)
|
||||
|
||||
def __str__(self):
|
||||
return self.text
|
||||
|
||||
class Suggester(models.model):
|
||||
name = models.CharField(null=True, blank=True, max_length=254)
|
||||
email = models.CharField(null=True, blank=True, max_length=254)
|
||||
|
||||
class Suggestion(models.Model):
|
||||
text = models.TextField()
|
||||
context = models.TextField(null=True, blank=True)
|
||||
author_name = models.CharField(max_length=254)
|
||||
suggester = models.ForeignKey(
|
||||
Suggester, on_delete=models.CASCADE)
|
||||
|
||||
def __str__(self):
|
||||
return self.text
|
||||
|
|
17
web/lazaro_quotes/templates/lazaro_quotes/show_quote.html
Normal file
17
web/lazaro_quotes/templates/lazaro_quotes/show_quote.html
Normal file
|
@ -0,0 +1,17 @@
|
|||
{% extends 'main/base.html' %}
|
||||
|
||||
{% block content %}
|
||||
<div class="mt-5 container justify-content-center d-flex">
|
||||
<div class="card text-center" style="width: 80rem;">
|
||||
<div class="card-body">
|
||||
<blockquote class="blockquote mb-0">
|
||||
<h1>"{{ quote.text }}"</h1>
|
||||
<footer class="blockquote-footer">
|
||||
<h2>{{ quote.author.name }}</h2>
|
||||
</footer>
|
||||
</blockquote>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
10
web/lazaro_quotes/urls.py
Normal file
10
web/lazaro_quotes/urls.py
Normal file
|
@ -0,0 +1,10 @@
|
|||
from django.urls import path
|
||||
|
||||
from . import views
|
||||
|
||||
app_name = "lazaro_quotes"
|
||||
|
||||
urlpatterns = [
|
||||
path("", views.show_quote, name="show_quote"),
|
||||
path("suggest", views.suggest_quote_form, name="suggest_quote_form")
|
||||
]
|
|
@ -1,3 +1,32 @@
|
|||
from django.shortcuts import render
|
||||
from django.shortcuts import render, redirect
|
||||
from django.contrib import messages
|
||||
|
||||
# Create your views here.
|
||||
from .models import Quote, Suggester
|
||||
from .forms import SuggestionForm
|
||||
|
||||
|
||||
def show_quote(request):
|
||||
quote = Quote.objects.order_by('?').first() or None
|
||||
|
||||
return render(request, 'lazaro_quotes/show_quote.html', {"quote": quote})
|
||||
|
||||
|
||||
def suggest_quote_form(request):
|
||||
if request.method == 'POST':
|
||||
form = SuggestionForm(request.POST)
|
||||
|
||||
if form.is_valid():
|
||||
suggester, created = Suggester.objects.get_or_create(defaults={"name": form.cleaned_data['suggester_name']},
|
||||
email=form.cleaned_data['suggester_email'])
|
||||
|
||||
suggestion = form.save(commit=False)
|
||||
suggestion.suggester = suggester
|
||||
suggestion.save()
|
||||
|
||||
messages.success(
|
||||
request, "Tu sugestión se ha enviado correctamente")
|
||||
return redirect('lazaro_quotes:show_quote')
|
||||
else:
|
||||
form = SuggestionForm()
|
||||
|
||||
return render(request, 'main/show_form.html', {'form_header': '¡Mándanos alguna frase celebre/graciosa que hayas escuchado en la FIC!', 'form': form})
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue