0

私はいつかフロントエンドクラッドを許可するアプリを持っています。スラッグはslugifyで作成されます。今のところ、すべてのオブジェクトの作成は管理領域で行われていますが、管理者の中からオブジェクトを作成して保存する際にスラッグを自動生成する方法があるのだろうか?Django Adminの自動生成スラッグ

ここではフロントエンドのための方法です。それが関連しているかどうかはわかりません。ありがとうございました。

def create_slug(instance, new_slug=None): 
    slug = slugify(instance.title) 
    if new_slug is not None: 
     slug = new_slug 
    qs = Veteran.objects.filter(slug=slug).order_by('-id') 
    exists = qs.exists() 
    if exists: 
     new_slug = '%s-%s' % (slug, qs.first().id) 
     return create_slug(instance, new_slug=new_slug) 
    return slug 
+0

あなたは、モデルの 'save'メソッドをオーバーライドしようとしたことがありますか? –

答えて

1

これを別の回答に使用しただけで、クリップボードに正確に正しいコードがあります。

from django.utils.text import slugify 
class Event(models.Model): 

    date = models.DateField() 
    location_title = models.TextField() 
    location_code = models.TextField(blank=True, null=True) 
    picture_url = models.URLField(blank=True, null=True, max_length=250) 
    event_url = models.SlugField(unique=True, max_length=250) 

    def __str__(self): 
     return self.event_url + " " + str(self.date) 

    def save(self, *args, **kwargs): 
     self.event_url = slugify(self.location_title+str(self.date)) 
     super(Event, self).save(*args, **kwargs) 
+0

これは、Django管理者の検証を中断します。 –

0

上記の解決策は、Django管理インターフェースで妥当性検査を中断します。私はお勧め:

from django import forms 
 
from django.http.request import QueryDict 
 
from django.utils.text import slugify 
 

 
from .models import Article 
 

 

 
class ArticleForm(forms.ModelForm): 
 

 
    def __init__(self, *args, **kwargs): 
 
     super(ArticleForm, self).__init__(*args, **kwargs) 
 

 
     # Ensure that data is a regular Python dictionary so we can 
 
     # modify it later. 
 
     if isinstance(self.data, QueryDict): 
 
      self.data = self.data.copy() 
 

 
     # We assume here that the slug is only generated once, when 
 
     # saving the object. Since they are used in URLs they should 
 
     # not change when valid. 
 
     if not self.instance.pk and self.data.get('title'): 
 
      self.data['slug'] = slugify(self.data['title']) 
 

 
    class Meta: 
 
     model = Article 
 
     exclude = []

関連する問題