Add member management functionality in group views and templates
This commit is contained in:
parent
f211b9af50
commit
6ada3290c8
5 changed files with 86 additions and 9 deletions
|
@ -12,7 +12,7 @@ form a[role="button"] {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
i.ri-vip-crown-fill {
|
i.owner {
|
||||||
color: var(--pico-color-amber-200);
|
color: var(--pico-color-amber-200);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -48,12 +48,55 @@
|
||||||
<a href="{% url "group_edit_members" pk=group.pk %}" role="button"><i class="ri-user-add-fill"></i> Modifier les membres</a>
|
<a href="{% url "group_edit_members" pk=group.pk %}" role="button"><i class="ri-user-add-fill"></i> Modifier les membres</a>
|
||||||
</p>
|
</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<ul>
|
<table>
|
||||||
<li>
|
<thead>
|
||||||
{{ group.owner }} ({{ owner_count }}) <i class="ri-vip-crown-fill"></i>
|
<tr>
|
||||||
</li>
|
<th>Membre</th>
|
||||||
{% for member in members.all %}<li>{{ member }} ({{ member.count }})</li>{% endfor %}
|
<th>
|
||||||
</ul>
|
<i class="ri-vip-crown-fill"></i>
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
<i class="ri-mv-line"></i>
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
<i class="ri-delete-bin-fill"></i>
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>{{ group.owner }}</td>
|
||||||
|
<td>
|
||||||
|
<i class="ri-vip-crown-fill owner"></i>
|
||||||
|
</td>
|
||||||
|
<td>{{ owner_count }}</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
{% for member in members.all %}
|
||||||
|
<tr>
|
||||||
|
<td>{{ member }}</td>
|
||||||
|
<td></td>
|
||||||
|
<td>{{ member.count }}</td>
|
||||||
|
<td>
|
||||||
|
<a href="{% url "group_remove_member" pk=group.pk user_pk=member.pk %}">
|
||||||
|
<i class="ri-close-fill" alt="Supprimer"></i>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<form method="post" action="{% url "group_add_member" pk=group.pk %}">
|
||||||
|
{% csrf_token %}
|
||||||
|
<fieldset role="group">
|
||||||
|
<input type="string"
|
||||||
|
name="username"
|
||||||
|
id="username"
|
||||||
|
placeholder="Membre"
|
||||||
|
required>
|
||||||
|
<button type="submit">Ajouter</button>
|
||||||
|
</fieldset>
|
||||||
|
</form>
|
||||||
<h2>
|
<h2>
|
||||||
<i class="ri-music-2-fill"></i> Mes musiques ({{ musics.count }})
|
<i class="ri-music-2-fill"></i> Mes musiques ({{ musics.count }})
|
||||||
</h2>
|
</h2>
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
<ul>
|
<ul>
|
||||||
{% for group in user.owned_group_set.all %}
|
{% for group in user.owned_group_set.all %}
|
||||||
<li>
|
<li>
|
||||||
<a href="{{ group.get_absolute_url }}">{{ group.name }}</a> <i class="ri-vip-crown-fill"></i>
|
<a href="{{ group.get_absolute_url }}">{{ group.name }}</a> <i class="ri-vip-crown-fill owner"></i>
|
||||||
</li>
|
</li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% for group in user.group_set.all %}
|
{% for group in user.group_set.all %}
|
||||||
|
|
10
game/urls.py
10
game/urls.py
|
@ -21,6 +21,11 @@ urlpatterns = [
|
||||||
views.GroupAddMusicView.as_view(),
|
views.GroupAddMusicView.as_view(),
|
||||||
name="group_add_music",
|
name="group_add_music",
|
||||||
),
|
),
|
||||||
|
path(
|
||||||
|
"group/<int:pk>/add_member/",
|
||||||
|
views.GroupAddMemberView.as_view(),
|
||||||
|
name="group_add_member",
|
||||||
|
),
|
||||||
path(
|
path(
|
||||||
"group/remove_music/<int:pk>/",
|
"group/remove_music/<int:pk>/",
|
||||||
views.GroupRemoveMusicView.as_view(),
|
views.GroupRemoveMusicView.as_view(),
|
||||||
|
@ -31,6 +36,11 @@ urlpatterns = [
|
||||||
views.GroupRemoveGameView.as_view(),
|
views.GroupRemoveGameView.as_view(),
|
||||||
name="group_remove_game",
|
name="group_remove_game",
|
||||||
),
|
),
|
||||||
|
path(
|
||||||
|
"group/<int:pk>/remove_membrer/<int:user_pk>/",
|
||||||
|
views.GroupRemoveMemberView.as_view(),
|
||||||
|
name="group_remove_member",
|
||||||
|
),
|
||||||
path(
|
path(
|
||||||
"group/<int:pk>/start_game/", views.GameCreateView.as_view(), name="start_game"
|
"group/<int:pk>/start_game/", views.GameCreateView.as_view(), name="start_game"
|
||||||
),
|
),
|
||||||
|
|
|
@ -5,9 +5,10 @@ import google_auth_oauthlib
|
||||||
import googleapiclient.discovery
|
import googleapiclient.discovery
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||||
|
from django.contrib.auth.models import User
|
||||||
from django.db.models import Count, Q
|
from django.db.models import Count, Q
|
||||||
from django.http import JsonResponse
|
from django.http import JsonResponse
|
||||||
from django.shortcuts import redirect
|
from django.shortcuts import get_object_or_404, redirect
|
||||||
from django.views import View
|
from django.views import View
|
||||||
from django.views.generic.detail import DetailView, SingleObjectMixin
|
from django.views.generic.detail import DetailView, SingleObjectMixin
|
||||||
from django.views.generic.edit import CreateView, DeleteView, UpdateView
|
from django.views.generic.edit import CreateView, DeleteView, UpdateView
|
||||||
|
@ -26,6 +27,7 @@ class MemberFilterMixin(LoginRequiredMixin):
|
||||||
super()
|
super()
|
||||||
.get_queryset()
|
.get_queryset()
|
||||||
.filter(Q(members=self.request.user) | Q(owner=self.request.user))
|
.filter(Q(members=self.request.user) | Q(owner=self.request.user))
|
||||||
|
.distinct()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -91,6 +93,18 @@ class GroupAddMusicView(MemberFilterMixin, SingleObjectMixin, View):
|
||||||
return redirect(group)
|
return redirect(group)
|
||||||
|
|
||||||
|
|
||||||
|
class GroupAddMemberView(OwnerFilterMixin, SingleObjectMixin, View):
|
||||||
|
model = models.Group
|
||||||
|
|
||||||
|
def post(self, request, pk):
|
||||||
|
group = self.get_object()
|
||||||
|
username = request.POST.get("username")
|
||||||
|
user = User.objects.get(username=username)
|
||||||
|
|
||||||
|
group.members.add(user)
|
||||||
|
return redirect(group)
|
||||||
|
|
||||||
|
|
||||||
class GroupRemoveMusicView(OwnerFilterMixin, SingleObjectMixin, View):
|
class GroupRemoveMusicView(OwnerFilterMixin, SingleObjectMixin, View):
|
||||||
model = models.MusicVideo
|
model = models.MusicVideo
|
||||||
|
|
||||||
|
@ -101,6 +115,16 @@ class GroupRemoveMusicView(OwnerFilterMixin, SingleObjectMixin, View):
|
||||||
return redirect(group)
|
return redirect(group)
|
||||||
|
|
||||||
|
|
||||||
|
class GroupRemoveMemberView(View):
|
||||||
|
def get(self, request, pk, user_pk):
|
||||||
|
relation = get_object_or_404(
|
||||||
|
models.Group.members.through, group_id=pk, user_id=user_pk
|
||||||
|
)
|
||||||
|
group = relation.group
|
||||||
|
relation.delete()
|
||||||
|
return redirect(group)
|
||||||
|
|
||||||
|
|
||||||
class GroupRemoveGameView(SingleObjectMixin, View):
|
class GroupRemoveGameView(SingleObjectMixin, View):
|
||||||
model = models.MusikGame
|
model = models.MusikGame
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue