Поле Slug в модели Django не включает связанные теги при сохранении

У меня есть следующий save метод в моей модели Django:

slug = models.SlugField(unique=True, blank=True, null=True, max_length=255)

def save(self, *args, **kwargs):
    if self.pk is None:
        super().save(*args, **kwargs)

    tags = Tag.objects.filter(office__id=self.id).values_list("name", flat=True)
    print("Tags")
    print(tags)

    location_work_override_id = self.location_work_override.id if self.location_work_override else ''
    location_work_id = self.contest.location_work_id if self.contest and self.contest.location_work_id else ''

    if not self.slug and tags:
        self.slug = slugify(
            f"{self.display_name}-{'-'.join(tags)}-{location_work_override_id}-{location_work_id}-{self.contest.short_name}-{self.contest.contest_number}"
        )
    elif not self.slug:
        self.slug = slugify(
            f"{self.display_name}-{location_work_override_id}-{location_work_id}-{self.contest.short_name}-{self.contest.contest_number}"
        )

    super().save(*args, **kwargs)

Поле slug должно включать связанные Tag имена из Tag модели, которая имеет ForeignKey к Office. Однако, когда я создаю новый экземпляр Office в админке Django, переменная tags в методе save всегда пуста, даже если я добавляю теги в интерфейсе админки.

Я подозреваю, что это временная проблема, поскольку метод save в Office выполняется до того, как сохраняются связанные с ним объекты Tag.

Мои вопросы:

  1. Как обеспечить сохранение объектов Tag до того, как к ним обратится метод save модели Office?
  2. Есть ли способ правильно заполнить поле slug тегами в этом сценарии, желательно не полагаясь на ручной порядок операций?

Я ищу надежное решение, которое будет надежно работать в админке Django и в других местах.

Вернуться на верх