Saya mencoba membuat SlugField
di Django.
Saya membuat model sederhana ini:
from django.db import models
class Test(models.Model):
q = models.CharField(max_length=30)
s = models.SlugField()
Saya kemudian melakukan ini:
>>> 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'
Saya mengharapkan b-b-b-b
.
python
django
django-models
slug
Johnd
sumber
sumber
def save(self):
dengandef save(self, *args, **kwargs):
untuk menghindari kesalahan yang terjadi saat menulis sesuatu sepertitest.objects.create(q="blah blah blah")
.slugify()
juga dapat ditemukan didjango.utils.text.slugify
, tidak jelas kapan ini ditambahkan.Ada kasus sudut dengan beberapa karakter utf-8
Contoh:
Ini dapat diatasi dengan Unidecode
sumber
Koreksi kecil untuk jawaban Thepeer: Untuk menggantikan
save()
fungsi di kelas model, lebih baik tambahkan argumen ke dalamnya:Jika tidak,
test.objects.create(q="blah blah blah")
akan menghasilkanforce_insert
kesalahan (argumen yang tidak terduga).sumber
return super(test, self).save(*args, **kwargs)
. Saya pikir metode ini kembaliNone
, dan saya tidak tahu ada rencana untuk mengubahnya, tetapi tidak ada salahnya untuk mengembalikan apa yang dilakukan metode superclass kalau-kalau itu berubah di masa depan.Jika Anda menggunakan antarmuka admin untuk menambahkan item baru dari model Anda, Anda dapat mengatur
ModelAdmin
di Andaadmin.py
dan menggunakannyaprepopulated_fields
untuk secara otomatis memasukkan siput:Di sini, ketika pengguna memasukkan nilai dalam formulir admin untuk
name
bidang, makaslug
akan secara otomatis diisi dengan slugified yang benarname
.sumber
slug
danname
memiliki terjemahan. Bagaimana saya bisa melakukannya dengan terjemahan? Karena saya sudah mencoba menambahkan'slug_en':('name_en',)
dan mendapatkan kesalahan bahwa atribut tidak ada dalam model saya.Dalam kebanyakan kasus siput tidak boleh berubah, jadi Anda benar-benar hanya ingin menghitungnya pada penyimpanan pertama:
sumber
Gunakan
prepopulated_fields
di kelas admin Anda:sumber
Jika Anda tidak ingin mengatur slugfield menjadi Tidak dapat diedit, maka saya yakin Anda ingin mengatur properti Null dan Blank menjadi False. Kalau tidak, Anda akan mendapatkan kesalahan saat mencoba menyimpan di Admin.
Jadi modifikasi pada contoh di atas akan menjadi ::
sumber
Saya menggunakan Django 1.7
Buat SlugField dalam model Anda seperti ini:
Kemudian di
admin.py
definisikanprepopulated_fields
;sumber
Anda dapat melihat dokumen untuk
SlugField
mengetahui lebih banyak tentang hal itu dengan cara yang lebih deskriptif.sumber