Миграции вносят изменения в базу данных. Переопределение методов, добавление свойств, определение новых методов и т. Д. c. все находится на уровне Python / Django и не имеет ничего отношения к базе данных, следовательно, для этого не требуется никаких миграций. Как бы вы изменили базу данных с помощью нового метода .save(..)
?
Если вам нужно заполнить существующие записи, вы можете создать миграцию данных [Django - документ] . Вы можете создать такую миграцию с помощью:
python manage.py makemigrations <b>--empty</b> <i>appname</i>
и затем указать способ миграции (например, вручную итерируя свои записи и каждый раз вычисляя слаг).
Обратите внимание, что ваш Однако модель Category
также имеет поле no slug
, что означает, что self.slug = …
не очень полезен. Вы добавите атрибут .slug
к вашему объекту модели. Но как только этот объект больше не находится в памяти, эти данные больше не доступны. Более того, вы не можете искать в slug
, так как слаг не хранится в базе данных.
Возможно, вы захотите взглянуть на пакет django-autoslug
[ readthedocs] . Это позволяет вам определить AutoSlugField
и просто указать, как его заполнить. Кроме того, этот пакет будет пытаться найти уникальный слаг, ведь в противном случае другое имя, строго говоря, может привести к тому же слагу.
from autoslug import <b>AutoSlugField</b>
class Category(models.Model):
name = models.CharField(max_length=128 , unique=True)
<b>slug = AutoSlugField(populate_from='name')</b>
views = models.IntegerField(default=0)
likes = models.IntegerField(default=0)
def __str__(self):
return self.name
class Meta:
verbose_name_plural = "Categories"