2015-09-25 2 views
1

Я имею эту модельПочему мой переопределенный метод сохранения не работает в моей модели 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 в методе сохранения для этого, но по какой-то причине функция сохранения, которую я определил, не работает, когда я создаю объект клиники у администратора 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 не удается.

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

ответ

3

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

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) 
2

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

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

  • Нет связанных вопросов^_^