Add group leader functionality and update group member management

- Create GroupLeader model and migration
- Alter GroupLeader member field to include related_name
- Implement is_leader and is_owner methods in Group model
- Update GroupDetailView to pass leader and owner status to template
- Refactor group buttons and members display into separate templates
- Add view and URL for setting group leaders
- Update permissions for adding/removing members and clearing blacklist
- Bump version to 0.1.1 in uv.lock
This commit is contained in:
Edgar P. Burkhart 2025-06-14 21:58:33 +02:00
parent 6cd9c0c841
commit 7409b4cd8f
Signed by: edpibu
GPG key ID: 9833D3C5A25BD227
10 changed files with 244 additions and 101 deletions

View file

@ -23,12 +23,33 @@ class Group(models.Model):
def get_absolute_url(self):
return reverse("group_detail", kwargs={"pk": self.pk})
def is_owner(self, user):
return user == self.owner
def is_leader(self, user):
return (
self.is_owner(user)
or self.members.through.objects.filter(
lead__is_leader=True, user=user
).exists()
)
def is_member(self, user):
return self.is_owner(user) or self.members.filter(user=user).exists()
class Meta:
constraints = [
models.UniqueConstraint(Lower("name"), "owner", name="unique_group_name")
]
class GroupLeader(models.Model):
member = models.OneToOneField(
Group.members.through, on_delete=models.CASCADE, related_name="lead"
)
is_leader = models.BooleanField(default=False)
class MusicVideo(models.Model):
yt_id = models.CharField(max_length=16)
title = models.CharField(blank=True)