对象属性不保存

时间:2016-03-10 19:14:08

标签: python django

我正在制作一个django应用程序,我覆盖了模型的save方法,使用缓慢的函数引入一个新的属性slug。但是当我尝试从shell访问该属性时,它会引发错误AttributeError: 'States' object has no attribute 'slug'

代码: -

from django.db import models
from django.template.defaultfilters import slugify

class States(models.Model):
    title = models.CharField(max_length = 100)
    country = models.CharField(max_length = 79)

    def __str__(self):
        return self.title

    def save(self,*args,**kwargs):
        self.slug = slugify(self.title)
        super(States,self).save(*args,**kwargs)


class Colleges(models.Model):
    title = models.CharField(max_length = 100)
    state = models.ForeignKey(States)
    Description = models.TextField()

    def __str__(self):
        return self.title

2 个答案:

答案 0 :(得分:2)

那不行。 Django总是会检查你的模型类的初始定义来创建数据库映射,django不会像你那样认识slug是一个数据库字段。在您当前的实现中,您只是将slug创建为python类属性而不是数据库字段,因为django模型也是一个python类。

我不确定您为什么不想像定义slugtitle一样定义country,但最简单的解决方法是添加它作为一个类属性。

答案 1 :(得分:0)

如果您不想在数据库中保存slug,可以使用func webView(webView: UIWebView, didFailLoadWithError error: NSError?)的类方法计算:

State

现在您可以将其作为标题:

之类的属性进行访问
@property
def slug (self):
    return slugify (self.title)