Django model 惯用方法记录

本文详细介绍Django中ORM操作的常见用法,包括获取所有记录、保存对象、数据过滤、特定记录获取、数据排序、记录更新与删除、ForeignKey及Many-to-Many字段的反向查询等核心功能。

Django model 常用方法记录

1.得到模型中的所有记录

  publisher_list = Publisher.objects.all()

2.保存模型的一个对象

  publish.save()

3.模型数据的过滤

  Publisher.objects.filter(name='Apress')

4.得到特定记录

  Publisher.objects.get(name="Apress")

5.数据记录排序

  Publisher.objects.all().order_by("name")

6.数据记录逆向排序

  Publisher.objects.all().order_by("-name")

7.返回限制记录

  Publisher.objects.order_by('name')[0]

  Publisher.objects.order_by('name')[0:2]

8.快捷更新记录

  Publisher.objects.filter(id=52).update(name='Apress Publishing')

9.删除记录

  Publisher.objects.all().delete()

10.Foreign Key 反向得到记录

  publisher.book_set.all()

  book_set 只是一个 QuerySet,所以它可以像QuerySet一样,能实现数据过滤和分切

  publisher.book_set.filter(name__icontains='django')

  属性名称book_set是由模型名称的小写(如book)加_set组成的

11.访问多对多值(Many-to-Many Values)

  book.authors.all()

  book.authors.filter(first_name='Adrian')

反向查询

  author.book_set.all()


转载于:https://my.oschina.net/waston/blog/626825

Django 模型(Model)中,除了字段定义和元数据(`class Meta`)之外,还可以通过定义方法来增强模型的行为。这些方法主要用于封装与模型数据相关的业务逻辑,使得模型具有更高的可复用性和可维护性。 ### 模型实例方法 模型实例方法是定义在模型类中的函数,它们操作模型实例的属性或与数据库交互。这些方法在模型类的每个实例上都可以调用。 #### `__str__()` 方法方法用于返回模型实例的字符串表示,通常用于在 Django 管理界面或调试时显示模型对象的可读性信息。 ```python class Book(models.Model): title = models.CharField(max_length=100) author = models.ForeignKey(Author, on_delete=models.CASCADE) def __str__(self): return self.title ``` 在 Django 管理界面或 Shell 中打印 `Book` 实例时,将显示 `title` 字段的值[^3]。 #### `get_absolute_url()` 方法方法用于定义模型实例的“规范 URL”,通常用于生成指向特定对象的链接。它通常与 `reverse()` 函数一起使用。 ```python from django.urls import reverse class Article(models.Model): title = models.CharField(max_length=200) def get_absolute_url(self): return reverse('article-detail', args=[str(self.id)]) ``` 在模板或视图中可以使用 `{{ object.get_absolute_url }}` 来获取该对象的详细页面链接[^3]。 ### 模型管理器方法 模型管理器(Manager)是 Django 模型中用于处理数据库查询的接口,默认的管理器是 `objects`。可以通过自定义管理器来扩展查询功能。 #### 自定义管理器方法 可以通过继承 `models.Manager` 并定义新的方法来实现自定义查询逻辑。 ```python class PublishedManager(models.Manager): def get_queryset(self): return super().get_queryset().filter(status='published') class Post(models.Model): STATUS_CHOICES = ( ('draft', 'Draft'), ('published', 'Published'), ) title = models.CharField(max_length=100) status = models.CharField(max_length=10, choices=STATUS_CHOICES, default='draft') objects = models.Manager() # 默认管理器 published = PublishedManager() # 自定义管理器 # 使用自定义管理器 Post.published.all() ``` 通过 `Post.published.all()` 可以直接获取所有已发布状态的帖子记录[^1]。 ### 模型类方法 模型类方法是定义在模型类中的 `@classmethod` 或 `@staticmethod` 方法,它们通常用于执行与模型相关的通用操作,而不是针对某个特定实例。 #### `classmethod` 示例 ```python class Employee(models.Model): name = models.CharField(max_length=100) department = models.CharField(max_length=100) @classmethod def get_employees_by_department(cls, department_name): return cls.objects.filter(department=department_name) ``` 可以通过 `Employee.get_employees_by_department('HR')` 来获取 HR 部门的所有员工。 ### 数据库操作方法 Django 提供了一系列内置方法用于执行数据库操作,如保存、删除和更新记录。 #### `save()` 方法方法用于将模型实例保存到数据库中。如果实例尚未保存,则会执行插入操作;如果已经保存,则会执行更新操作。 ```python book = Book(title='Django Guide') book.save() # 插入新记录 book.title = 'Django Advanced Guide' book.save() # 更新现有记录 ``` 在保存之前,可以对模型字段进行修改,调用 `save()` 后更改将被提交到数据库[^1]。 #### `delete()` 方法方法用于从数据库中删除模型实例。 ```python book = Book.objects.get(id=1) book.delete() # 删除该记录 ``` 执行 `delete()` 后,该记录将从数据库中被删除[^1]。 ### 总结 Django 模型中的方法为开发者提供了强大的工具来封装业务逻辑和数据库操作。通过合理使用这些方法,可以提高代码的可读性、可维护性和可扩展性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值