Django: Как удалить группу, связанную с командой?
Я хочу расширить групповую модель Django. Для этого я создал класс Team, который ссылается на модель группы с полем OneToOne. Создание и обновление работают как ожидалось, но мне не удается удалить команду.
# teamapp/models.py
from django.db import models
from rules.contrib.models import RulesModel
from django.contrib.auth.models import Group
class Team(RulesModel):
group = models.OneToOneField(
Group,
on_delete=models.CASCADE,
primary_key=True,
)
name = models.CharField(max_length=80)
def save(self, *args, **kwargs):
self.update_or_create_group()
return super().save(*args, **kwargs)
def update_or_create_group(self, *args, **kwargs):
group, _ = Group.objects.update_or_create(
id=self.pk,
defaults={"name": self.name},
)
# teamapp/signals.py
from django.db.models.signals import post_delete
from django.dispatch import receiver
from django.db import transaction
from django.contrib.auth.models import Group
from teamapp.models import Team
@receiver(post_delete, sender=Team)
def delete_group(sender, instance, created, **kwargs):
# TODO: Use celery for async operation: https://docs.djangoproject.com/en/3.2/topics/db/transactions/
transaction.on_commit(lambda: delete_group(instance))
def delete_group(team_instance):
Group.objects.filter(id=team_instance.group).delete()
Почему-то сигнал не срабатывает. Есть ли другой способ?
Не уверен, что это приемлемый способ, но я забыл загрузить сигнал. Поэтому я загрузил его через файл apps.py.
# teamapp/apps.py
from django.apps import AppConfig
class TeamappConfig(AppConfig):
default_auto_field = "django.db.models.BigAutoField"
name = "teamapp"
verbose_name = "Team"
def ready(self):
import teamapp.signals