Создать поле слаг в существующей таблице - PullRequest
4 голосов
/ 01 ноября 2011

У меня есть таблица с данными. Возможно ли поле слизня автоматически генерироваться на существующей таблице? Или есть другая альтернатива? Спасибо Вот мой столик

enter image description here

Ответы [ 3 ]

17 голосов
/ 01 ноября 2011

Используя шаблонный фильтр slugify, вы можете написать скрипт или просмотреть объекты в оболочке.

>>> from django.template.defaultfilters import slugify
>>> for obj in MyModel.objects.all():
...     obj.slug = slugify(obj.title)
...     obj.save()
4 голосов
/ 01 ноября 2011

У меня есть удобная модель, которую я использую во всех проектах для подобных вещей. Я думаю, что это хороший пример того, как делать то, что вы хотите.

from django.template.defaultfilters import slugify


class NameAndSlug(models.Model):
    '''
    convenience model for things that are just names
    '''
    name = models.CharField(max_length=200, unique=True)
    slug = models.SlugField()

    def __unicode__(self):
        return self.name

    def save(self, *args, **kwargs):
        """
        Slugify name if it doesn't exist. IMPORTANT: doesn't check to see
        if slug is a dupe!
        """
        if not self.slug:
            self.slug = slugify(self.name)
        super(NameAndSlug, self).save(*args, **kwargs)

    class Meta:
        abstract = True
3 голосов
/ 01 ноября 2011

Вы можете сделать это в MySQL следующим образом (замените имя вашей таблицы на «tableName»):

UPDATE `tableName` SET `slug`=LOWER(REPLACE( `title` , ' ' , '-' ));

Это приведет к замене заголовков, таких как «This Is A Title», на слагов, подобных «this-is».-a-title ".

РЕДАКТИРОВАТЬ Для обработки скобок и удаления двойных пробелов используйте:

UPDATE `tableName` SET `slug`=LOWER( REPLACE( REPLACE( REPLACE( REPLACE( `title` , '(' , '' ) , ')' , '' ) , '  ' , ' ' ) , ' ' , '-' ) );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...