0

У меня есть приложение, которое в один прекрасный день разрешит фронтальную crud, которая создаст пул с slugify. Однако сейчас все создание объекта выполняется в области администрирования, и мне было интересно, есть ли способ автоматически генерировать пули при создании и сохранении объекта изнутри администратора?Автогенерированные слизняки в Django Admin

Вот метод slugify для front-end; не уверен, что это даже актуально. Спасибо.

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 = []

Смежные вопросы