У меня есть три модели Book
, Part
, Chapter
, в моем models.py
, которые используют SlugField
.
Для класса Book
я написал обработчик slug в пользовательском методе save
, который проверяет, существует ли объект с помощью slug
. И когда это происходит, он делает его уникальным, добавляя к нему count
.
Как мне переписать блок внутри Book
на SlugMixin
, чтобы я мог использовать его для остальной части модели?
models.py
...
class SlugMixin(models.Model):
slug = models.SlugField(max_length=50, unique=True)
class Meta:
abstract = True
class Book(models.Model):
title = models.CharField(max_length=50)
slug = models.SlugField(max_length=50, unique=True)
def save(self, *args, **kwargs):
if not self.pk and not self.slug:
slug = slugify(self.title, allow_unicode=True)
slug_exists = True
counter = 1
self.slug = slug
while slug_exists:
try:
slug_exists = Book.objects.get(slug=slug)
if slug_exists:
slug = self.slug + '_' + str(counter)
counter += 1
except Book.DoesNotExist:
self.slug=slug
break
class Part(models.Model):
book = models.ForeignKey(Book, on_delete=models.CASCADE, related_name='parts')
title = models.CharField(max_length=30)
slug = models.SlugField(max_length=30, unique=True)
class Chapter(models.Model):
part = models.ForeignKey(Part, on_delete=models.CASCADE, related_name='chapters')
title = models.CharField(max_length=40)
slug = models.SlugField(max_length=40, unique=True)
...