Add wishes

This commit is contained in:
Jannis Portmann 2023-04-16 00:43:56 +02:00
parent d2792ba10e
commit 17d672cc3b
5 changed files with 94 additions and 48 deletions

View file

@ -3,7 +3,7 @@ from django.contrib.auth.forms import UserCreationForm
from django.utils.safestring import mark_safe
from friendly_captcha.fields import FrcCaptchaField
from .models import Offer, PflaenzliUser
from .models import Offer, PflaenzliUser, Wish
class CreateOfferForm(forms.ModelForm):
@ -27,3 +27,9 @@ class FilterForm(forms.Form):
'<i class="fa-solid fa-location-dot"></i> Zipcode'))
distance = forms.IntegerField(required=False, label=mark_safe(
'<i class="fa-solid fa-signs-post"></i> Distance (km)'))
class WishForm(forms.ModelForm):
class Meta:
model = Wish
fields = ['title']

View file

@ -0,0 +1,44 @@
{% extends 'base.html' %}
{% load crispy_forms_tags %}
{% block title %}Whishlist{% endblock %}
{% block content %}
<div class="mb-3">
<h1>{{ title }} Wishlist</h1>
</div>
<div class="mb-5">
{% if wishes %}
<ul class="list-group">
{% for wish in wishes %}
<li class="list-group-item d-flex justify-content-between align-items-center">
{{ wish.title }}
{% if own %}
<span>
<form method="post" action="{% url 'delete_wish' wish.id %}">
{% csrf_token %}
<button type="submit" class="btn btn-danger">
<i class="fas fa-trash-alt" aria-hidden="true" title="Delete"></i>
</button>
</form>
</span>
{% endif %}
</li>
{% endfor %}
</ul>
{% else %}
<div class="alert alert-warning" role="alert">There are currently no wishes!</div>
{% endif %}
</div>
{% if form %}
<hr class="mb-5"/>
<div class="mb-3">
<h3>
<i class="fas fa-star"></i> New wish
</h3>
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form|crispy }}
<button type="submit" class="btn btn-pfl">Add</button>
</form>
</div>
{% endif %}
{% endblock %}

View file

@ -1,45 +0,0 @@
{% extends 'base.html.twig' %}
{% block title %}Whishlist{% endblock %}
{% block content %}
{% for message in app.flashes('error') %}
<div class="alert alert-error" role="alert">
{{ message }}
</div>
{% endfor %}
{% for message in app.flashes('success') %}
<div class="alert alert-success" role="alert">
{{ message }}
</div>
{% endfor %}
<div class="mb-3">
<h1>Your Wishlist</h1>
</div>
<div class="mb-3">
{% if wishes == [] %}
<div class="alert alert-warning" role="alert">
There are currently no wishes!
</div>
{% else %}
<ul class="list-group">
{% for wish in wishes %}
<li class="list-group-item d-flex justify-content-between align-items-center"> {{ wish.title }}
<span>
<a href="{{ path('delete_wish', {'urlId': wish.urlid}) }}" class="btn btn-danger" aria-label="Delete"><i class="fas fa-trash-alt" aria-hidden="true" title="Delete"></i></a>
</span>
</li>
{% endfor %}
</ul>
{% endif %}
</div>
<hr>
<div class="mb-3">
<h3><i class="fas fa-star"></i> New wish</h3>
{{ form(wish_form) }}
</div>
{% endblock %}

View file

@ -15,10 +15,12 @@ urlpatterns = [
path("offer/<int:offer_id>/edit/", views.offer_edit, name="offer_edit"),
path("offer/<int:offer_id>/trade/", views.offer_trade, name="offer_trade"),
path("accounts/<int:user_id>", views.user_detail, name="user_detail"),
path("accounts/<int:user_id>/wishlist/", views.wishlist, name="wishlist"),
path('accounts/login/', auth_views.LoginView.as_view(template_name='registration/login.html')),
path('accounts/profile/', auth_views.LoginView.as_view(template_name='user/detail.html'), name='user_profile'),
path('accounts/register/', views.register_user, name='register_user'),
path('accounts/', include('django.contrib.auth.urls')),
path("faq/", TemplateView.as_view(template_name='app/faq.html'), name="faq"),
path("imprint/", TemplateView.as_view(template_name='app/imprint.html'), name="imprint"),
path("wish/delete/<str:wish_id>", views.delete_wish, name='delete_wish'),
]

View file

@ -1,11 +1,13 @@
from django.shortcuts import render, get_object_or_404, redirect
from django.shortcuts import render, get_object_or_404, redirect, reverse
from django.utils import timezone
from django.contrib import messages
from django.contrib.auth import login
from django.contrib.auth.decorators import login_required
from django.views.decorators.csrf import csrf_protect
from django.views.decorators.http import require_POST
from django.http import HttpResponseForbidden
from .forms import CreateOfferForm, RegistrationForm, FilterForm
from .forms import CreateOfferForm, RegistrationForm, FilterForm, WishForm
from .models import PflaenzliUser, Offer, Wish
from .mail import send_offer_email
@ -88,6 +90,43 @@ def offer_edit(request, offer_id):
return render(request, "basic_form.html", {"form": form, "button_label": "Update", "title": "Edit Offer"})
@login_required
def wishlist(request, user_id):
wishes = Wish.objects.filter(user=user_id)
if user_id == request.user.id:
title = "Your"
if request.method == "POST":
form = WishForm(request.POST)
if form.is_valid():
wish = form.save(commit=False)
wish.user = request.user
wish.save()
messages.success(request, "Wish added successfully!")
form = WishForm()
else:
form = None
user = get_object_or_404(PflaenzliUser, id=user_id)
title = f"{user.username}'s"
return render(request, "user/wish.html", {"title": title, "form": form, "wishes": wishes, "own": user_id == request.user.id})
@csrf_protect
@require_POST
@login_required
def delete_wish(request, wish_id):
wish = get_object_or_404(Wish, id=wish_id)
if wish.user != request.user:
messages.error(request, "You don't have permission to delete this wish!")
return redirect("wishlist", request.user.id)
wish.delete()
return redirect("wishlist", request.user.id)
@login_required
def offer_trade(request, offer_id):
offer = get_object_or_404(Offer, id=offer_id)