Compare commits

...

3 Commits

Author SHA1 Message Date
Niko Abeler 4729eb88f8 adjust forms for update 2023-06-11 20:46:20 +02:00
Niko Abeler aa745b1f6a missing confirmations 2023-06-11 20:44:14 +02:00
Niko Abeler 1f27ff7702 player + character improvements 2023-06-11 20:37:03 +02:00
15 changed files with 176 additions and 13 deletions

View File

@ -0,0 +1,44 @@
# Generated by Django 4.2.1 on 2023-06-11 18:43
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('guild', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='Resource',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=255)),
('description', models.TextField()),
],
options={
'verbose_name': 'resource',
'verbose_name_plural': 'resources',
},
),
migrations.AlterField(
model_name='player',
name='name',
field=models.CharField(max_length=255, unique=True),
),
migrations.CreateModel(
name='ResourceEarned',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('amount', models.IntegerField()),
('character', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='guild.character', verbose_name='character')),
('resource', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='guild.resource', verbose_name='resource')),
],
options={
'verbose_name': 'resourceearned',
'verbose_name_plural': 'resourceearneds',
},
),
]

View File

@ -0,0 +1,16 @@
{% extends 'base.html' %}
{% block content %}
<h1>Session Delete</h1>
<p>Are you sure you want to delete <strong>{{ adventure.name}}</strong>?</p>
<p>This will delete all associated sessions!</p>
<form action="" method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Delete Adventure">
</form>
{% endblock content %}

View File

@ -14,7 +14,7 @@
<div class="column">
<a class="button button-clear" href="{% url 'guild:adventure_delete' adventure.id %}">Delete</a>
</div>
</div>
</div>
<p>{{adventure.description|md|safe}}</p>

View File

@ -0,0 +1,14 @@
{% extends 'base.html' %}
{% block content %}
<h1>Session Delete</h1>
<p>Are you sure you want to delete <strong>{{ character.name}}</strong>?</p>
<form action="" method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Delete Character">
</form>
{% endblock content %}

View File

@ -3,14 +3,25 @@
{% load guild_extras %}
{% block content %}
<h1>Character: {{ character.name }}</h1>
<h2>
<div class="row">
<div class="column column-75">
<h1>Character: {{ character.name }}</h1>
</div>
<div class="column">
<a class="button button-outline" href="{% url 'guild:character_update' character.id %}">Edit</a>
</div>
<div class="column">
<a class="button button-clear" href="{% url 'guild:character_delete' character.id %}">Delete</a>
</div>
</div>
<p>
Played by:
<a href="{% url 'guild:player_detail' character.player.id %}">
{{ character.player.name }}
</a>
</h2>
</p>
<p>{{character.description|md|safe}}</p>

View File

@ -4,6 +4,10 @@
<form action="" method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Create Character">
{% if object %}
<input type="submit" value="Update Character">
{% else %}
<input type="submit" value="Create Character">
{% endif %}
</form>
{% endblock content %}

View File

@ -25,5 +25,25 @@
{% endfor %}
</ul>
<h2>Characters</h2>
<ul>
{% for character in characters %}
<li>
<a href="{% url 'guild:character_detail' character.id %}">{{ character.name }}</a>
</li>
{% endfor %}
</ul>
<h2>Players</h2>
<ul>
{% for player in players %}
<li>
<a href="{% url 'guild:player_detail' player.id %}">{{ player.name }}</a>
</li>
{% endfor %}
</ul>
{% endblock content %}

View File

@ -0,0 +1,14 @@
{% extends 'base.html' %}
{% block content %}
<h1>Session Delete</h1>
<p>Are you sure you want to delete <strong>{{ player.name}}</strong>?</p>
<form action="" method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Delete Player">
</form>
{% endblock content %}

View File

@ -1,7 +1,17 @@
{% extends 'base.html' %}
{% block content %}
<h1>Player: {{ player.name }}</h1>
<div class="row">
<div class="column column-75">
<h1>Player: {{ player.name }}</h1>
</div>
<div class="column">
<a class="button button-outline" href="{% url 'guild:player_update' player.id %}">Edit</a>
</div>
<div class="column">
<a class="button button-clear" href="{% url 'guild:player_delete' player.id %}">Delete</a>
</div>
</div>
<h2>Characters</h2>

View File

@ -4,6 +4,10 @@
<form action="" method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Create Player">
{% if object %}
<input type="submit" value="Update Player">
{% else %}
<input type="submit" value="Create Player">
{% endif %}
</form>
{% endblock content %}

View File

@ -4,6 +4,10 @@
<form action="" method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Create Session">
{% if object %}
<input type="submit" value="Update Session">
{% else %}
<input type="submit" value="Create Session">
{% endif %}
</form>
{% endblock content %}

View File

@ -9,8 +9,12 @@ urlpatterns = [
# path("players/", views.PlayerListView.as_view(), name="player_list"),
path("players/create/", player_views.CreatePlayerView.as_view(), name="create_player"),
path("players/<int:pk>/", player_views.PlayerDetailView.as_view(), name="player_detail"),
path("players/<int:pk>/update/", player_views.PlayerUpdateView.as_view(), name="player_update"),
path("players/<int:pk>/delete/", player_views.PlayerDeleteView.as_view(), name="player_delete"),
path("characters/create/", character_views.CreateCharacterView.as_view(), name="create_character"),
path("characters/<int:pk>/", character_views.CharacterDetailView.as_view(), name="character_detail"),
path("characters/<int:pk>/update/", character_views.CharacterUpdateView.as_view(), name="character_update"),
path("characters/<int:pk>/delete/", character_views.CharacterDeleteView.as_view(), name="character_delete"),
path("adventures/create/", adventure_views.CreateAdventureView.as_view(), name="create_adventure"),
path("adventures/<int:pk>/", adventure_views.AdventureDetailView.as_view(), name="adventure_detail"),
path("adventures/<int:pk>/update/", adventure_views.AdventureUpdateView.as_view(), name="adventure_update"),

View File

@ -2,7 +2,7 @@ from django.views.generic import TemplateView, ListView, DetailView
from django.views.generic.edit import CreateView
from django.contrib.auth.mixins import LoginRequiredMixin
from guild.models import Adventure, Player
from guild.models import Adventure, Character, Player
# Create your views here.
class HomeView(LoginRequiredMixin, TemplateView):
@ -11,6 +11,8 @@ class HomeView(LoginRequiredMixin, TemplateView):
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["adventures"] = Adventure.objects.all()
context["players"] = Player.objects.all()
context["characters"] = Character.objects.all()
return context

View File

@ -1,6 +1,6 @@
from django.views.generic import TemplateView, ListView, DetailView
from django.views.generic.edit import CreateView
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django.contrib.auth.mixins import LoginRequiredMixin
from guild.models import Character
@ -11,4 +11,12 @@ class CreateCharacterView(LoginRequiredMixin, CreateView):
fields = ["name", "description", "player"]
class CharacterDetailView(LoginRequiredMixin, DetailView):
model = Character
model = Character
class CharacterUpdateView(LoginRequiredMixin, UpdateView):
model = Character
fields = ["name", "description", "player"]
class CharacterDeleteView(LoginRequiredMixin, DeleteView):
model = Character
success_url = "/"

View File

@ -1,6 +1,6 @@
from django.views.generic import TemplateView, ListView, DetailView
from django.views.generic.edit import CreateView
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django.contrib.auth.mixins import LoginRequiredMixin
from guild.models import Player
@ -11,4 +11,12 @@ class CreatePlayerView(LoginRequiredMixin, CreateView):
fields = ["name"]
class PlayerDetailView(LoginRequiredMixin, DetailView):
model = Player
model = Player
class PlayerUpdateView(LoginRequiredMixin, UpdateView):
model = Player
fields = ["name"]
class PlayerDeleteView(LoginRequiredMixin, DeleteView):
model = Player
success_url = "/"