0

我正在尝试在 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?

4

1 回答 1

3

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

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

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

于 2015-05-15T10:05:03.967 回答