Django模型的属性与方法

本节介绍Django模型的属性和方法,以及如何重写之前定义的模型方法等内容。

3.5.1  模型属性

Django模型中最重要的属性就是Manager,它是Django模型和数据库查询操作之间的接口,并且被用作从数据库当中获取实例的途径。如果Django模型中没有指定自定义的Manager,则默认名称就是“objects”。

另外,Manager只能通过模型类来访问,不能通过模型实例来访问。

3.5.2  模型方法

在Django模型中添加自定义方法,会给对象提供自定义的“行级”操作能力;与之对应的是Manager的方法,其目的在于提供“表级”的操作。模型方法应该在某个对象实例上生效,这是一个将相关逻辑代码放在模型上的技巧。

关于模型方法的使用,示例代码如下:

【代码3-12】

01  from django.db import models
02  
03  class PersonAge(models.Model):
04      name = models.CharField(max_length=32)
05      age = models.CharField(max_length=8)
06  
07      def person_age_status(self):
08          "Returns the person's age status."
09          if self.age < 1:
10              return "Baby"
11          elif self.age < 3:
12              return "Toddler"
13          elif self.age < 6:
14              return "Preschooler"
15          elif self.age < 12:
16              return "School-Children"
17          elif self.age < 18:
18              return "Teenager"
19          elif self.age < 40:
20              return "Youth"
21          elif self.age < 60:
22              return "Middle-Age"
23          else:
24              return "Old-Age"
25  
26      @property
27      def person_info(self):
28          "Returns the person's info."
29          return '%s %s' % (self.name, self.age)
30      #...
31      pass

【代码分析】

在第03行代码中,定义了一个描述人的年龄段的类PersonAge。

在第07~24行代码中,定义了PersonAge类的模型方法person_age_status(),返回具体年龄段的信息。

在第26~29行代码中,定义了PersonAge类的属性方法person_info(),返回个人信息。

3.5.3  重写之前定义的模型方法

Django模型中还有一个关于模型方法的集合,其中包含了一些可能是自定义的数据库行为,比如save()方法和delete()方法就是两个最有可能定制的方法。同时,设计人员可以重写这些方法(或其他模型方法)以更改方法的行为。

有一个非常典型的重写内置方法的场景,就是打算在保存对象时额外做一些事。关于重写save()方法的示例代码如下:

【代码3-13】

01  from django.db import models
02  
03  class Blog(models.Model):
04      name = models.CharField(max_length=100)
05      tagline = models.TextField()
06  
07      def save(self, *args, **kwargs):
08          do_something()
09          super().save(*args, **kwargs)  # Call the "real" save() method.
10          do_something_else()
11      #...
12      pass

【代码分析】

在第03行代码中,定义了一个描述博客的类Blog。

在第07~10行代码中,重写了save()方法,具体说明如下:

  • 第09行代码中,通过super()方法调用了父类中原生的save()方法。
  • 在第08行和第10行代码中,设计人员可以通过编写自己的代码来实现重写save()方法。

另外,还可以重写 save()方法来阻止该方法的执行,示例代码如下:

【代码3-14】

01  from django.db import models
02  
03  class Blog(models.Model):
04      name = models.CharField(max_length=100)
05      tagline = models.TextField()
06      
07      def save(self, *args, **kwargs):
08          if self.name == "King's blog":
09              return # King永远不应该有自己的博客
10          else:
11              super().save(*args, **kwargs)  # 调用原生的save()方法
12      #...
13      pass

【代码分析】

在第03行代码中,定义了一个描述博客的类Blog。

在第07~11行代码中,重写了save()方法,具体说明如下:

  • 在第08~11行代码中,通过“if…else…”条件语句判断name属性值,然后根据判断条件来选择是否通过super()方法来调用父类中原生的save()方法。

Django模型会不时地扩展模型内置方法的功能,也会添加新参数。假如设计人员在重写的方法中使用了*args和**kwargs参数,则必须确保重写方法能够接收这些新添加的参数。

本文节选自《Django 5企业级Web应用开发实战(视频教学版)》,获出版社和作者授权发布。

  • 22
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django是一个基于Python的Web框架,其中最重要的组件之一就是模型(Model)。模型是用于定义数据结构和数据访问方法的类,它允许开发人员使用面向对象的方式来管理数据库。下面是Django模型的定义方法和使用方法: 1. 定义模型 要定义一个Django模型,需要在一个Python文件中导入Django的`models`模块,并定义一个继承自`models.Model`的类。在这个类中,可以定义各种属性,每个属性都代表数据库中的一个字段。例如,下面是一个简单的模型定义: ```python from django.db import models class Book(models.Model): title = models.CharField(max_length=100) author = models.CharField(max_length=50) pub_date = models.DateField() ``` 这个模型定义了一个`Book`类,它有三个属性:`title`、`author`和`pub_date`。这些属性分别对应数据库中的一个字符串字段、一个日期字段和一个字符串字段。 2. 迁移数据库 一旦定义了模型,就需要迁移数据库Django提供了一个命令行工具来处理数据库迁移,只需要在终端中运行以下命令: ```bash python manage.py makemigrations python manage.py migrate ``` 第一条命令会生成一个迁移文件,它包含了所有需要在数据库中添加、删除或修改的表格和字段。第二条命令会根据迁移文件来更新数据库。 3. 使用模型 一旦数据库迁移完成,就可以使用模型来访问数据了。Django提供了一个ORM(对象关系映射)系统,它允许开发人员使用面向对象的方式来访问数据库。 例如,要在数据库中创建一本新书,可以使用以下代码: ```python book = Book(title='Python编程', author='Guido van Rossum', pub_date='1991-02-20') book.save() ``` 这个代码会创建一个`Book`对象,并将其保存到数据库中。 要查询数据库中的数据,可以使用以下代码: ```python books = Book.objects.filter(author='Guido van Rossum') for book in books: print(book.title) ``` 这个代码会查询数据库中所有作者是'Guido van Rossum'的书,并打印它们的标题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值