Python Django模型变量指向一个不工作的函数

Python Django模型变量指向一个不工作的函数,python,django,python-2.7,function,model-view-controller,Python,Django,Python 2.7,Function,Model View Controller,我有以下资料: class College(models.Model): url_name = create_url_name() def create_url_name(self): return self.name.lower().replace("the", "").strip().replace(" ", "_") 但当我运行它时,我得到以下错误: NameError: name 'create_url_name' is not defined 我所做

我有以下资料:

class College(models.Model):
    url_name = create_url_name()
    def create_url_name(self):
        return self.name.lower().replace("the", "").strip().replace(" ", "_")
但当我运行它时,我得到以下错误:

NameError: name 'create_url_name' is not defined

我所做的就是调用我创建的一个函数,为什么它不工作?

如果你想为你的url添加一个slug,你可以像这样使用SlugField:

from django.utils.text import slugify

class College(models.Model):
    name = models.CharField(unique=True, max_length=100)
    url_name = models.SlugField(unique=True)

    def save(self, *args, **kwargs):
        self.url_name = slugify(self.name)
        super(College, self).save(*args, **kwargs)
您也可以对代码使用相同的方法:

class College(models.Model):
    name = models.CharField(unique=True, max_length=100)
    url_name = models.SlugField(unique=True)

    def save(self, *args, **kwargs):
        self.url_name = self.name.lower().replace("the", "").strip().replace(" ", "_")
        super(College, self).save(*args, **kwargs)

如果您想要url的slug,可以使用如下SlugField:

from django.utils.text import slugify

class College(models.Model):
    name = models.CharField(unique=True, max_length=100)
    url_name = models.SlugField(unique=True)

    def save(self, *args, **kwargs):
        self.url_name = slugify(self.name)
        super(College, self).save(*args, **kwargs)
您也可以对代码使用相同的方法:

class College(models.Model):
    name = models.CharField(unique=True, max_length=100)
    url_name = models.SlugField(unique=True)

    def save(self, *args, **kwargs):
        self.url_name = self.name.lower().replace("the", "").strip().replace(" ", "_")
        super(College, self).save(*args, **kwargs)

首先,在python中,必须在调用函数之前声明它,因此必须在声明之后将url\u name=create\u url\u name移动到

但即使这样做,也会出现错误,因为该函数是在对象上调用的,但它是在未实例化的类上调用的

这将有助于:

class College(models.Model):
    def __init__(self, *args, **kwargs):
        models.Model.__init__(self, *args, **kwargs)
        self.url_name = self.create_url_name()

    def create_url_name(self):
        return self.name.lower().replace("the", "").strip().replace(" ", "_")

首先,在python中,必须在调用函数之前声明它,因此必须在声明之后将url\u name=create\u url\u name移动到

但即使这样做,也会出现错误,因为该函数是在对象上调用的,但它是在未实例化的类上调用的

这将有助于:

class College(models.Model):
    def __init__(self, *args, **kwargs):
        models.Model.__init__(self, *args, **kwargs)
        self.url_name = self.create_url_name()

    def create_url_name(self):
        return self.name.lower().replace("the", "").strip().replace(" ", "_")

您正在调用一个函数,而不是为self调用方法replace create\u url\u name。create\u url\u name:

一处房产会更好:

    class College(models.Model):

        @property
        def url_name(self):
            return self.name.lower().replace("the", "").strip().replace(" ", "_")

您正在调用一个函数,而不是为self调用方法replace create\u url\u name。create\u url\u name:

一处房产会更好:

    class College(models.Model):

        @property
        def url_name(self):
            return self.name.lower().replace("the", "").strip().replace(" ", "_")

你没有调用你所做的函数,因为你所做的函数属于类的一个实例。你期望什么?如果将create_url_name的定义移到url_name字段之前,则不会出现该错误,但会以另一种方式失败。您没有调用所创建的函数,因为所创建的函数属于该类的实例。您期望什么?如果将create_url_name的定义移到url_name字段之前,则不会给出该错误,但会以另一种方式失败。