为什么我的 Django 模型中覆盖的保存方法不是 运行?
Why is my overridden save method not running in my django model?
我有这个模型
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)
我正在尝试让 slug 字段在创建时自行填充。我试图在保存方法中使用 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>
我得到一个错误,因为没有可用的 slug,所以 get_absolute_url 失败了。
如果我然后返回管理员并手动添加一个 slug,那么一切正常。为什么会这样?
试试这个:
def save(self, *args, **kwargs):
self.slug = slugify(self.name)
super(Clinic, self).save(*args, **kwargs)
但是如果您只想在创建时填充 slug 一次:
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
即可。
我有这个模型
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)
我正在尝试让 slug 字段在创建时自行填充。我试图在保存方法中使用 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>
我得到一个错误,因为没有可用的 slug,所以 get_absolute_url 失败了。
如果我然后返回管理员并手动添加一个 slug,那么一切正常。为什么会这样?
试试这个:
def save(self, *args, **kwargs):
self.slug = slugify(self.name)
super(Clinic, self).save(*args, **kwargs)
但是如果您只想在创建时填充 slug 一次:
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
即可。