Почему мой переопределенный метод сохранения не работает в моей модели django?

У меня есть эта модель

class Clinic(models.Model):
    name = models.CharField(max_length=100)
    email = models.EmailField(blank=True)
    website = models.URLField(blank=True)
    phone_number = PhoneNumberField(blank=True)

    slug = models.SlugField(blank=True)
    delivery = models.BooleanField()

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse('clinic_detail', kwargs={'slug': self.slug})

    def save(self, *args, **kwargs):
        slug = slugify(self.name)
        super(Clinic, self).save(*args, **kwargs)

и я пытаюсь, чтобы слизняк сам заполнился при создании. Я пытаюсь использовать функцию slugify в методе save для этого, но по какой-то причине определенная мной функция сохранения не запускается, когда я создаю объект клиники от администратора Django. Когда я пытаюсь получить доступ к объекту клиники из списка, который я генерирую в этом шаблоне

<ul>
{% for clinic in object_list %}
    <li><a href="{{clinic.get_absolute_url}}">{{clinic.name}}</a></li>
{% empty %}
    <li>No clinics available</li>
{% endfor %}
</ul>

Я получаю сообщение об ошибке, потому что нет никакого пули, поэтому get_absolute_url завершается ошибкой.

Если я тогда возвращаюсь к админу и вручную добавляю слаг, то все работает нормально. Почему это происходит?

2 ответа

Решение

Попробуй это:

def save(self, *args, **kwargs):
    self.slug = slugify(self.name)
    super(Clinic, self).save(*args, **kwargs)

Но если вы хотите заполнить слаг только один раз при создании:

def save(self, *args, **kwargs):
    if not self.pk:
        self.slug = slugify(self.name)
    super(Clinic, self).save(*args, **kwargs)

В вашем save() метод, которым вы назначаете результат вызова slugify к локальной переменной, а не к вашему экземпляру slug приписывать. просто замени slug с self.slug и это будет работать.

Другие вопросы по тегам