Есть простой способ, чтобы заполнить SlugField от страничке?
class Foo(models.Model):
title = models.CharField(max_length=20)
slug = models.SlugField()
есть ли встроенный способ заставить поле slug автоматически заполняться на основе названия? Возможно, в Admin и за пределами Admin.
5 ответов
для админки в Django 1.0 и выше, вам нужно использовать
prepopulated_fields = {'slug': ('title',), }
в вашем admin.py
ваш ключ в словаре prepopulated_fields-это поле, которое вы хотите заполнить, а значение-кортеж полей, которые вы хотите объединить.
вне администратора, вы можете использовать slugify
функция в ваших представлениях. В шаблонах вы можете использовать |slugify
фильтр.
существует также этот пакет, который позаботится об этом автоматически: https://pypi.python.org/pypi/django-autoslug
вне администратора, см. этот фрагмент django. Положите его в свой .save()
, и он будет работать с объектами, созданными программными средствами. Внутри администратора, как сказали другие, используйте prepopulated_fields
.
для pre-1.0:
slug = models.SlugField(prepopulate_from=('title',))
должно работать нормально
для 1.0, используйте camflan это
вы также можете использовать pre_save django signal для заполнения слизняка за пределами кода администратора django. См.документация по сигналам Django.
проверка уникальности AJAX slug также будет полезна, см. Проверка Уникальности Слизней По Мере Ввода @ Irrational Exuberance
autoslug работал довольно хорошо для меня в прошлом. Хотя я никогда не пробовал использовать его с приложением админ.