python - 为什么我覆盖的保存方法没有在我的 Django 模型中运行?

标签 python django django-templates 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)

关于python - 为什么我覆盖的保存方法没有在我的 Django 模型中运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32780538/

相关文章:

Python 在 Tkinter GUI Canvas 中附加文本

python - 如何在 PyQt5 中自定义 QGroupBox 标题?

javascript - 如何在搜索中处理一个非常大的表?

django - 如何在 Django 中呈现单个单选按钮选项?

python - 复制 html 代码从 "string"到下一个 "string"

python - 在 sudo 下运行 python 脚本时,如何避免以 root 身份创建文件夹?

django-rest-framework http 在 django 1.5 上以 415 失败

django - 在使用syncdb时如何使用Django来呈现旧数据库而不破坏它?

javascript - 向下滚动时自动加载内容

python - 保存在DB中的Django Json如何在模板中使用?