name = models.CharField(max_length=60)
slug = models.SlugField(unique=True, blank=True)
def save(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.name + ' ' + str(self.pk))
super(TaskList, self).save(*args, **kwargs)
я хочу, чтобы при создании экземпляра генерировался уникальный slug, но self.pk возвращает none. Что я делаю не так?
Где у тебя self.pk?
Разве это не дефолтное поле?
оно появляется только после сохранения
Тут есть паттерн с первым сейвом if self.pk is None, вот в нем и генерь слаг. Это будет первый сейв Хотя тут уже от логики зависит))
slugify(f"{self.name} {self.pk}") используй f-стринги, это и более читаемо и работает быстрее
Но раз self.pk появляеться после сохранения, то откуда его взять? Нужно переписать другой метод?
Зачем делать слаг по пк?
А как тогда сделать уникальный слаг?
Unique=true
Это я в качестве примера, что это читается лучше) конечно не возьмется ниоткуда, нужно другую логику названия придумывать)
в цикле добавлять число и проверять на уникальность)
Я хочу, чтобы он автоматом создавался
default=method
Та проще уж сигнал post_save переписать
такое себе
Обсуждают сегодня