美文网首页django
在模型类里面定义一些方法,处理数据

在模型类里面定义一些方法,处理数据

作者: 陆_志东 | 来源:发表于2018-08-23 22:39 被阅读7次
    from django.db import models
    
    class Person(models.Model):
        first_name = models.CharField(max_length=50)
        last_name = models.CharField(max_length=50)
        birth_date = models.DateField()
    
        def baby_boomer_status(self):  # 实例可以调用这个方法来查看自己的状态
            "Returns the person's baby-boomer status."
            import datetime
            if self.birth_date < datetime.date(1945, 8, 1):
                return "Pre-boomer"
            elif self.birth_date < datetime.date(1965, 1, 1):
                return "Baby boomer"
            else:
                return "Post-boomer"
    
        def _get_full_name(self):  
            "Returns the person's full name."
            return '%s %s' % (self.first_name, self.last_name)
        full_name = property(_get_full_name)   # 只读属性
    

    重写预定义的模型方法

    比如重写对象的save方法

    from django.db import models
    
    class Blog(models.Model):
        name = models.CharField(max_length=100)
        tagline = models.TextField()
    
        def save(self, *args, **kwargs):
            do_something()
            super(Blog, self).save(*args, **kwargs) # Call the "real" save() method.
            do_something_else()
    

    覆盖内建模型方法的一个典型的使用场景是,你想在保存一个对象时做一些其它事情。

    from django.db import models
    
    class Blog(models.Model):
        name = models.CharField(max_length=100)
        tagline = models.TextField()
    
        def save(self, *args, **kwargs):
            if self.name == "Yoko Ono's blog":
                return # Yoko shall never have her own blog!
            else:
                super(Blog, self).save(*args, **kwargs) # Call the "real" save() method.
               #如果没有调用父类super的save方法,对象不会保存到数据库中
    

    必须要记住调用超类的方法—— super(Blog, self).save(*args, **kwargs) —— 来确保对象被保存到数据库中。如果你忘记调用超类的这个方法,默认的行为将不会发生且数据库不会有任何改变。

    相关文章

      网友评论

        本文标题:在模型类里面定义一些方法,处理数据

        本文链接:https://www.haomeiwen.com/subject/ujkviftx.html