Поле 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
.
Мои вопросы:
- Как обеспечить сохранение объектов
Tag
до того, как к ним обратится методsave
моделиOffice
? - Есть ли способ правильно заполнить поле
slug
тегами в этом сценарии, желательно не полагаясь на ручной порядок операций?
Я ищу надежное решение, которое будет надежно работать в админке Django и в других местах.