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

Программы на Python
Ответить
Anonymous
 Поле слизняка в модели Django, не включая связанные теги при сохранении

Сообщение Anonymous »

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

Подробнее здесь: https://stackoverflow.com/questions/792 ... gs-on-save
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»