Есть ли простой способ заполнить SlugField из CharField?

python django slug

16161 просмотра

6 ответа

class Foo(models.Model):
    title = models.CharField(max_length=20)
    slug = models.SlugField()

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

Автор: ashchristopher Источник Размещён: 17.05.2019 02:50

Ответы (6)


61 плюса

Решение

для администратора в Django 1.0 и выше, вам нужно использовать

prepopulated_fields = {'slug': ('title',), }

в вашем admin.py

Ваш ключ в словаре prepopulated_fields - это поле, которое вы хотите заполнить, а значение - это набор полей, которые вы хотите объединить.

За пределами администратора вы можете использовать slugifyфункцию в ваших представлениях. В шаблонах вы можете использовать |slugifyфильтр.

Существует также этот пакет, который позаботится об этом автоматически: https://pypi.python.org/pypi/django-autoslug

Автор: camflan Размещён: 26.09.2008 07:51

6 плюса

За пределами администратора, посмотрите этот фрагмент Django . Поместите его в свой .save(), и он будет работать с объектами, созданными программно. Внутри админа, как уже говорили другие, используйте prepopulated_fields.

Автор: AdamKG Размещён: 26.09.2008 08:59

3 плюса

Для pre-1.0:

slug = models.SlugField(prepopulate_from=('title',))

должно работать просто отлично

Для 1.0 используйте camflan's

Автор: Nick Sergeant Размещён: 26.09.2008 07:44

2 плюса

Вы также можете использовать сигнал pre_save django, чтобы заполнить слаг за пределами кода администратора django. Смотрите документацию по сигналам Django .

Также будет полезна проверка уникальности слагов Ajax, см. Проверка уникальности слагов типа As-You-@ @ Irrational Exuberance

Автор: carefulweb Размещён: 30.09.2008 01:31

0 плюса

autoslug работал довольно хорошо для меня в прошлом. Хотя я никогда не пытался использовать его с приложением администратора.

Автор: Jon Lemmon Размещён: 19.09.2011 12:23

0 плюса

в admin.py

из. моделей импорт пост

Класс Slugfield (admin.ModelAdmin): prepopulated_fields = {"slug" :( "title",)}

admin.site.register (Post, ExtraField)

Автор: Aayush Bhattarai Размещён: 09.03.2019 01:24
32x32