Есть простой способ, чтобы заполнить 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 работал довольно хорошо для меня в прошлом. Хотя я никогда не пробовал использовать его с приложением админ.