在 'LogEntry' 对象没有属性 pre_save 的创建结果中预先保存一个 slug

Pre save a slug on creation results in a 'LogEntry' object has no attribute pre_save

我正在尝试在 Django 中创建我的对象时自动生成一个 slug。

我的方法是使用pre_save信号,使用@receiver调用。

当我在我的 Django 管理中创建一个新条目时,我得到 'LogEntry' object has no attribute 'title'

我制作了一个如下所示的管理模型:

class CountryAdmin(admin.ModelAdmin):
    fields = ('title', 'is_visible')

我的 Country 对象有以下 model.py 代码:

class Country(models.Model):
    title = models.CharField(max_length=200)
    alias = models.SlugField(max_length=200)
    is_visible = models.BooleanField(default=False)

    def __str__(self):
        return self.title

    @staticmethod
    def get_all():
        return Country.objects.filter(is_visible = True).order_by('title')

    @receiver(pre_save)
    def country_presave_callback(sender, instance, *args, **kwargs):
        instance.alias = slugify(instance.title)

如何修改我的代码,以便在创建对象时始终自动创建 slug?

您应该将 sender 模型传递给 @receiver 装饰器:

@receiver(pre_save, sender=Country)
def country_presave_callback(sender, instance, *args, **kwargs):
    ...

在这种情况下,只有在保存 Country 的实例时才会调用回调。如果没有 sender 参数,将为 all 模型调用回调。