fix friend_code editing
This commit is contained in:
parent
36f97be9d0
commit
0ac8ac8d5c
5 changed files with 88 additions and 9 deletions
|
|
@ -1,4 +1,4 @@
|
|||
# Generated by Django 5.1.2 on 2025-03-14 05:35
|
||||
# Generated by Django 5.1.2 on 2025-03-15 22:05
|
||||
|
||||
import django.contrib.auth.models
|
||||
import django.contrib.auth.validators
|
||||
|
|
|
|||
|
|
@ -1,10 +1,18 @@
|
|||
from django.urls import path
|
||||
from .views import ListFriendCodesView, AddFriendCodeView, DeleteFriendCodeView, ChangeDefaultFriendCodeView, SettingsView
|
||||
from .views import (
|
||||
ListFriendCodesView,
|
||||
AddFriendCodeView,
|
||||
DeleteFriendCodeView,
|
||||
ChangeDefaultFriendCodeView,
|
||||
EditFriendCodeView,
|
||||
SettingsView,
|
||||
)
|
||||
|
||||
urlpatterns = [
|
||||
# ... other account URLs ...
|
||||
path("friend-codes/", ListFriendCodesView.as_view(), name="list_friend_codes"),
|
||||
path("friend-codes/add/", AddFriendCodeView.as_view(), name="add_friend_code"),
|
||||
path("friend-codes/edit/<int:pk>/", EditFriendCodeView.as_view(), name="edit_friend_code"),
|
||||
path("friend-codes/delete/<int:pk>/", DeleteFriendCodeView.as_view(), name="delete_friend_code"),
|
||||
path("friend-codes/default/<int:pk>/", ChangeDefaultFriendCodeView.as_view(), name="change_default_friend_code"),
|
||||
path("settings/", SettingsView.as_view(), name="settings"),
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ from django.contrib import messages
|
|||
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||
from django.urls import reverse_lazy
|
||||
from django.shortcuts import redirect, get_object_or_404
|
||||
from django.views.generic import ListView, CreateView, DeleteView, View, TemplateView
|
||||
from django.views.generic import ListView, CreateView, DeleteView, View, TemplateView, UpdateView
|
||||
from accounts.models import FriendCode
|
||||
from accounts.forms import FriendCodeForm
|
||||
from django.db.models import Case, When, Value, BooleanField
|
||||
|
|
@ -128,3 +128,24 @@ class SettingsView(LoginRequiredMixin, TemplateView):
|
|||
Display the user's settings.
|
||||
"""
|
||||
template_name = "account/settings.html"
|
||||
|
||||
class EditFriendCodeView(LoginRequiredMixin, UpdateView):
|
||||
"""
|
||||
Edit the in-game name for a friend code.
|
||||
The friend code itself is displayed as plain text.
|
||||
Also includes "Set Default" and "Delete" buttons in the template.
|
||||
"""
|
||||
model = FriendCode
|
||||
# Only the in_game_name field is editable
|
||||
fields = ['in_game_name']
|
||||
template_name = "friend_codes/edit_friend_code.html"
|
||||
context_object_name = "friend_code"
|
||||
success_url = reverse_lazy("list_friend_codes")
|
||||
|
||||
def get_queryset(self):
|
||||
# Ensure the user can only edit their own friend codes
|
||||
return FriendCode.objects.filter(user=self.request.user)
|
||||
|
||||
def form_valid(self, form):
|
||||
messages.success(self.request, "Friend code updated successfully.")
|
||||
return super().form_valid(form)
|
||||
50
theme/templates/friend_codes/edit_friend_code.html
Normal file
50
theme/templates/friend_codes/edit_friend_code.html
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
{% extends 'base.html' %}
|
||||
{% load crispy_forms_tags %}
|
||||
|
||||
{% block title %}Edit Friend Code{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="container mx-auto max-w-3xl mt-6">
|
||||
<h1 class="text-3xl font-bold mb-4">Edit Friend Code</h1>
|
||||
|
||||
<!-- Display the friend code as plain text -->
|
||||
<div class="mb-4 p-4 bg-base-100 dark:bg-base-900 rounded shadow">
|
||||
<span class="font-mono text-sm sm:text-base">Friend Code: {{ friend_code.friend_code }}</span>
|
||||
</div>
|
||||
|
||||
<!-- Update form for editing the in-game name -->
|
||||
<form method="post" novalidate id="edit-friendcode-form">
|
||||
{% csrf_token %}
|
||||
<div class="mb-4">
|
||||
{{ form.in_game_name.as_widget }}
|
||||
{% if form.in_game_name.errors %}
|
||||
<div class="text-red-600 text-sm">
|
||||
{{ form.in_game_name.errors }}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div class="flex flex-col md:flex-row justify-between items-center mt-6">
|
||||
<!-- Left group: Set Default & Delete -->
|
||||
<div class="flex items-center space-x-4">
|
||||
<form method="post" action="{% url 'change_default_friend_code' friend_code.id %}" class="inline">
|
||||
{% csrf_token %}
|
||||
{% if not friend_code.is_default %}
|
||||
<button type="submit" class="btn btn-secondary">Set as Default</button>
|
||||
{% else %}
|
||||
<button type="button" class="btn btn-secondary" disabled>Default</button>
|
||||
{% endif %}
|
||||
</form>
|
||||
<a href="{% url 'delete_friend_code' friend_code.id %}" class="btn btn-error">Delete</a>
|
||||
</div>
|
||||
|
||||
<!-- Right group: Cancel & Update -->
|
||||
<div class="flex items-center space-x-4 mt-4 md:mt-0">
|
||||
<a href="{% url 'list_friend_codes' %}" class="btn btn-secondary">Cancel</a>
|
||||
<!-- This update button is outside the form but tied to it with the HTML5 'form' attribute -->
|
||||
<button type="submit" form="edit-friendcode-form" class="btn btn-primary">Update</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
@ -11,22 +11,22 @@
|
|||
{% for code in friend_codes %}
|
||||
<li class="w-full grid grid-cols-2 grid-rows-2 md:grid-cols-8 md:grid-rows-1 items-center {% if code.is_default %}bg-green-200 dark:bg-green-300 dark:text-base-100{% else %}bg-base-100 dark:bg-base-900 dark:text-white{% endif %} p-4 rounded shadow">
|
||||
<div class="row-start-1 md:col-span-3">
|
||||
<span>{{ code.in_game_name }}</span>
|
||||
<span class="align-baseline"><a href="{% url 'edit_friend_code' code.id %}">{{ code.in_game_name }}</a></span>
|
||||
{% if code.is_default %}
|
||||
<span class="badge badge-success ml-2">Default</span>
|
||||
<span class="badge badge-success ml-2 align-baseline">Default</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="row-start-2 col-start-1 md:row-start-1 md:col-span-3 {% if not code.is_default %}mr-4{% endif %}">
|
||||
<span class="font-mono text-sm sm:text-base">{{ code.friend_code }}</span>
|
||||
<span class="font-mono text-sm sm:text-base align-baseline">{{ code.friend_code }}</span>
|
||||
</div>
|
||||
<div class="row-start-2 col-start-2 md:row-start-1 md:col-span-2 flex justify-end space-x-2">
|
||||
{% if not code.is_default %}
|
||||
<form method="post" action="{% url 'change_default_friend_code' code.id %}">
|
||||
{% csrf_token %}
|
||||
<button type="submit" class="btn btn-secondary btn-sm">Set Default</button>
|
||||
<button type="submit" class="btn btn-secondary btn-sm align-baseline">Set Default</button>
|
||||
</form>
|
||||
{% endif %}
|
||||
<a href="{% url 'delete_friend_code' code.id %}" class="btn btn-error btn-sm">Delete</a>
|
||||
<a href="{% url 'delete_friend_code' code.id %}" class="btn btn-error btn-sm align-baseline">Delete</a>
|
||||
</div>
|
||||
</li>
|
||||
{% endfor %}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue