django model 插入数据方法

Django ORM 数据插入示例


需要插入的数据表结构如下:

class UserInfo(models.Model):
    user_id =models.AutoField(primary_key=True)
    user_name=models.CharField(max_length=20,unique=True) 
    depart=models.ForeignKey(DepartmentInfo)
    role=models.ManyToManyField(Role)

          *注:从上述类中可以看出UserInfo除了一般的表项外,还有有一个外键,和一个多对多的field


插入数据方法如下:

        
        d1=DepartmentInfo.objects.get(depart_id=1) #  d1表示UserInfo的外键数据
        r1=Role.objects.get(role_name=role)        #  r1表示UserInfo的多对多数据
        u1=UserInfo(user_name=name,user_pwd=password,sex=sex,mobileno=mobile,email=email,depart=d1)
        u1.save()
        u1.role.add(r1)
        u1.save()

总结:

  •   普通数据项:直接插入
  •   外键数据项:先获取要插入的外键,然后和普通想一起插入
  •   多对多数据项:获取要插入的多对多数据项,待表中普通数据项和外键数据项save后,使用.add方法加入



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 模型中的方法为开发者提供了强大的工具来封装业务逻辑和数据库操作。通过合理使用这些方法,可以提高代码的可读性、可维护性和可扩展性。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值