refining adventure
This commit is contained in:
parent
fc748f8596
commit
765cb98e13
|
@ -83,9 +83,9 @@ class PlaySession(models.Model):
|
||||||
|
|
||||||
def get_absolute_url(self):
|
def get_absolute_url(self):
|
||||||
return reverse(
|
return reverse(
|
||||||
"guild:playsession_detail",
|
"guild:adventure_detail",
|
||||||
kwargs={"pk": self.adventure.pk, "playsession_pk": self.pk}
|
kwargs={"pk": self.adventure.pk}
|
||||||
)
|
) + "#playsession" + str(self.pk)
|
||||||
|
|
||||||
|
|
||||||
class ResourceEarned(models.Model):
|
class ResourceEarned(models.Model):
|
||||||
|
|
|
@ -3,25 +3,63 @@
|
||||||
{% load guild_extras %}
|
{% load guild_extras %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<h1>Adventure: {{ adventure.name }}</h1>
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="column column-75">
|
||||||
|
<h1>Adventure: {{ adventure.name }}</h1>
|
||||||
|
</div>
|
||||||
|
<div class="column">
|
||||||
|
<a class="button button-outline" href="{% url 'guild:adventure_update' adventure.id %}">Edit</a>
|
||||||
|
</div>
|
||||||
|
<div class="column">
|
||||||
|
<a class="button button-clear" href="{% url 'guild:adventure_delete' adventure.id %}">Delete</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<p>{{adventure.description|md|safe}}</p>
|
<p>{{adventure.description|md|safe}}</p>
|
||||||
|
|
||||||
<a href="{% url 'guild:create_playsession' adventure.id %}">Add new Session</a>
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="column column-75">
|
||||||
|
<h2>Sessions</h2>
|
||||||
|
</div>
|
||||||
|
<div class="column">
|
||||||
|
<a class="button" href="{% url 'guild:create_playsession' adventure.id %}">Add new Session</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
{% if not adventure.playsession_set.count %}
|
{% if not adventure.playsession_set.count %}
|
||||||
<p>No sessions found.</p>
|
<p>No sessions yet.</p>
|
||||||
{% else %}
|
{% else %}
|
||||||
<ul>
|
|
||||||
{% for playsession in adventure.playsession_set.all %}
|
{% for playsession in adventure.playsession_set.all %}
|
||||||
<li>
|
<div class="row">
|
||||||
<a href="{% url 'guild:playsession_detail' adventure.id playsession.id %}">
|
<div class="column column-75">
|
||||||
{{ playsession.date }}
|
<h3>{{ playsession.date }}</h3>
|
||||||
</a>
|
</div>
|
||||||
</li>
|
<div class="column">
|
||||||
|
<a class="button button-outline" href="{% url 'guild:playsession_update' adventure.id playsession.id %}">Edit</a>
|
||||||
|
</div>
|
||||||
|
<div class="column">
|
||||||
|
<a class="button button-clear" href="{% url 'guild:playsession_delete' adventure.id playsession.id %}">Delete</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h4>Characters</h4>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
{% for character in playsession.characters.all %}
|
||||||
|
<li>{{character.name}}</li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
<h4>Summary</h4>
|
||||||
|
|
||||||
|
<p>{{playsession.summary|md|safe}}</p>
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
{% endfor %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,10 @@
|
||||||
<form action="" method="post">
|
<form action="" method="post">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{{ form.as_p }}
|
{{ form.as_p }}
|
||||||
|
{% if object %}
|
||||||
|
<input type="submit" value="Update Adventure">
|
||||||
|
{% else %}
|
||||||
<input type="submit" value="Create Adventure">
|
<input type="submit" value="Create Adventure">
|
||||||
|
{% endif %}
|
||||||
</form>
|
</form>
|
||||||
{% endblock content %}
|
{% endblock content %}
|
|
@ -15,5 +15,15 @@
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
<h2>Adventures</h2>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
{% for adventure in adventures %}
|
||||||
|
<li>
|
||||||
|
<a href="{% url 'guild:adventure_detail' adventure.id %}">{{ adventure.name }}</a>
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
{% endblock content %}
|
{% endblock content %}
|
|
@ -0,0 +1,14 @@
|
||||||
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
<h1>Session Delete</h1>
|
||||||
|
|
||||||
|
<p>Are you sure you want to delete <strong>"{{ playsession.date }}"</strong> of the adventure <strong>{{ playsession.adventure.name}}</strong>?</p>
|
||||||
|
|
||||||
|
<form action="" method="post">
|
||||||
|
{% csrf_token %}
|
||||||
|
{{ form.as_p }}
|
||||||
|
<input type="submit" value="Delete Session">
|
||||||
|
</form>
|
||||||
|
{% endblock content %}
|
|
@ -1,17 +0,0 @@
|
||||||
{% extends 'base.html' %}
|
|
||||||
|
|
||||||
{% load guild_extras %}
|
|
||||||
|
|
||||||
{% block content %}
|
|
||||||
<h1>Session: {{ playsession.name }}</h1>
|
|
||||||
<h2>
|
|
||||||
Adventure:
|
|
||||||
<a href="{% url 'guild:adventure_detail' playsession.adventure.id %}">
|
|
||||||
{{ playsession.adventure.name }}
|
|
||||||
</a>
|
|
||||||
</h2>
|
|
||||||
|
|
||||||
<p>{{playsession.summary|md|safe}}</p>
|
|
||||||
|
|
||||||
|
|
||||||
{% endblock content %}
|
|
|
@ -4,6 +4,6 @@
|
||||||
<form action="" method="post">
|
<form action="" method="post">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{{ form.as_p }}
|
{{ form.as_p }}
|
||||||
<input type="submit" value="Create Adventure">
|
<input type="submit" value="Create Session">
|
||||||
</form>
|
</form>
|
||||||
{% endblock content %}
|
{% endblock content %}
|
|
@ -13,6 +13,9 @@ urlpatterns = [
|
||||||
path("characters/<int:pk>/", character_views.CharacterDetailView.as_view(), name="character_detail"),
|
path("characters/<int:pk>/", character_views.CharacterDetailView.as_view(), name="character_detail"),
|
||||||
path("adventures/create/", adventure_views.CreateAdventureView.as_view(), name="create_adventure"),
|
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>/", adventure_views.AdventureDetailView.as_view(), name="adventure_detail"),
|
||||||
path("adventures/<int:pk>/playsession/create/", adventure_views.CreatePlaySessionView.as_view(), name="create_playsession"),
|
path("adventures/<int:pk>/update/", adventure_views.AdventureUpdateView.as_view(), name="adventure_update"),
|
||||||
path("adventures/<int:pk>/playsession/<int:playsession_pk>/", adventure_views.PlaySessionDetailView.as_view(), name="playsession_detail"),
|
path("adventures/<int:pk>/delete/", adventure_views.AdventureDeleteView.as_view(), name="adventure_delete"),
|
||||||
|
path("adventures/<int:pk>/playsession/create/", adventure_views.PlaySessionCreateView.as_view(), name="create_playsession"),
|
||||||
|
path("adventures/<int:pk>/playsession/<int:playsession_pk>/update/", adventure_views.PlaySessionUpdateView.as_view(), name="playsession_update"),
|
||||||
|
path("adventures/<int:pk>/playsession/<int:playsession_pk>/delete/", adventure_views.PlaySessionDeleteView.as_view(), name="playsession_delete"),
|
||||||
]
|
]
|
||||||
|
|
|
@ -2,9 +2,15 @@ from django.views.generic import TemplateView, ListView, DetailView
|
||||||
from django.views.generic.edit import CreateView
|
from django.views.generic.edit import CreateView
|
||||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||||
|
|
||||||
from guild.models import Player
|
from guild.models import Adventure, Player
|
||||||
|
|
||||||
# Create your views here.
|
# Create your views here.
|
||||||
class HomeView(LoginRequiredMixin, TemplateView):
|
class HomeView(LoginRequiredMixin, TemplateView):
|
||||||
template_name = "guild/home.html"
|
template_name = "guild/home.html"
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super().get_context_data(**kwargs)
|
||||||
|
context["adventures"] = Adventure.objects.all()
|
||||||
|
return context
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ from django.forms.models import BaseModelForm
|
||||||
from django.http import HttpResponse
|
from django.http import HttpResponse
|
||||||
from django.shortcuts import get_object_or_404
|
from django.shortcuts import get_object_or_404
|
||||||
from django.views.generic import TemplateView, ListView, DetailView
|
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 django.contrib.auth.mixins import LoginRequiredMixin
|
||||||
from guild.forms import PlaySessionForm
|
from guild.forms import PlaySessionForm
|
||||||
|
|
||||||
|
@ -18,7 +18,15 @@ class CreateAdventureView(LoginRequiredMixin, CreateView):
|
||||||
class AdventureDetailView(LoginRequiredMixin, DetailView):
|
class AdventureDetailView(LoginRequiredMixin, DetailView):
|
||||||
model = Adventure
|
model = Adventure
|
||||||
|
|
||||||
class CreatePlaySessionView(LoginRequiredMixin, CreateView):
|
class AdventureUpdateView(LoginRequiredMixin, UpdateView):
|
||||||
|
model = Adventure
|
||||||
|
fields = ["name", "description", "master"]
|
||||||
|
|
||||||
|
class AdventureDeleteView(LoginRequiredMixin, DeleteView):
|
||||||
|
model = Adventure
|
||||||
|
success_url = "/"
|
||||||
|
|
||||||
|
class PlaySessionCreateView(LoginRequiredMixin, CreateView):
|
||||||
model = PlaySession
|
model = PlaySession
|
||||||
form_class = PlaySessionForm
|
form_class = PlaySessionForm
|
||||||
|
|
||||||
|
@ -30,10 +38,21 @@ class CreatePlaySessionView(LoginRequiredMixin, CreateView):
|
||||||
form.instance.adventure = self.adventure
|
form.instance.adventure = self.adventure
|
||||||
return super().form_valid(form)
|
return super().form_valid(form)
|
||||||
|
|
||||||
|
class PlaySessionUpdateView(LoginRequiredMixin, UpdateView):
|
||||||
|
model = PlaySession
|
||||||
|
form_class = PlaySessionForm
|
||||||
|
|
||||||
class PlaySessionDetailView(LoginRequiredMixin, DetailView):
|
def dispatch(self, request, *args, **kwargs):
|
||||||
|
self.adventure = get_object_or_404(Adventure, pk=kwargs["pk"])
|
||||||
|
return super().dispatch(request, *args, **kwargs)
|
||||||
|
|
||||||
|
class PlaySessionDeleteView(LoginRequiredMixin, DeleteView):
|
||||||
model = PlaySession
|
model = PlaySession
|
||||||
pk_url_kwarg = "playsession_pk"
|
pk_url_kwarg = "playsession_pk"
|
||||||
|
|
||||||
def get_queryset(self):
|
def dispatch(self, request, *args, **kwargs):
|
||||||
return super().get_queryset().filter(adventure_id=self.kwargs["pk"])
|
self.adventure = get_object_or_404(Adventure, pk=kwargs["pk"])
|
||||||
|
return super().dispatch(request, *args, **kwargs)
|
||||||
|
|
||||||
|
def get_success_url(self) -> str:
|
||||||
|
return self.adventure.get_absolute_url()
|
File diff suppressed because one or more lines are too long
|
@ -5,7 +5,7 @@
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<link rel="stylesheet" href="{% static 'pico.min.css' %}">
|
<link rel="stylesheet" href="{% static 'milligram.min.css' %}">
|
||||||
<title>Guild Journal</title>
|
<title>Guild Journal</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
Loading…
Reference in New Issue