Я пытаюсь создать SlugField
в Джанго.
Я создал эту простую модель:
from django.db import models
class Test(models.Model):
q = models.CharField(max_length=30)
s = models.SlugField()
Затем я делаю это:
>>> from mysite.books.models import Test
>>> t=Test(q="aa a a a", s="b b b b")
>>> t.s
'b b b b'
>>> t.save()
>>> t.s
'b b b b'
Я ожидал b-b-b-b
.
python
django
django-models
slug
JohnD
источник
источник
def save(self):
сdef save(self, *args, **kwargs):
тем чтобы избежать от ошибок, появляющихся при написании что - то подобноеtest.objects.create(q="blah blah blah")
.slugify()
также можно найти вdjango.utils.text.slugify
, не ясно, когда это было добавлено.Угловой корпус с некоторыми символами utf-8
Пример:
Это можно решить с помощью Unidecode
источник
Небольшое исправление к ответу Thepeer: чтобы переопределить
save()
функцию в модельных классах, лучше добавьте в нее аргументы:В противном случае
test.objects.create(q="blah blah blah")
приведет кforce_insert
ошибке (неожиданный аргумент).источник
return super(test, self).save(*args, **kwargs)
. Я думаю, что этот метод возвращаетсяNone
, и я не знаю никаких планов изменить это, но не вредно возвращать то, что делает метод суперкласса, если он когда-нибудь изменится в будущем.Если вы используете интерфейс администратора , чтобы добавить новые элементы модели, вы можете создать
ModelAdmin
в вашемadmin.py
и использоватьprepopulated_fields
для автоматизации внесения слизняка:Здесь, когда пользователь вводит значение в форму администратора для
name
поля, оноslug
будет автоматически заполнено правильной версиейname
.источник
slug
иname
поля имеют переводы. Как я могу сделать это с переводами? Потому что я попытался добавить'slug_en':('name_en',)
и получил ошибку, что атрибут не существует в моей модели.В большинстве случаев слаг не должен меняться, поэтому вы действительно хотите рассчитать его только при первом сохранении:
источник
Используйте
prepopulated_fields
в своем классе администратора:источник
Если вы не хотите устанавливать для поля слагов значение «Не быть редактируемым», то, я думаю, вы захотите установить для свойств «Пустой» и «Пустой» значение «Ложь». В противном случае вы получите ошибку при попытке сохранить в Admin.
Таким образом, модификация к приведенному выше примеру будет:
источник
Я использую Django 1.7
Создайте SlugField в вашей модели следующим образом:
Затем в
admin.py
определениеprepopulated_fields
;источник
Вы можете посмотреть документы,
SlugField
чтобы узнать больше об этом более наглядно.источник