django—model

本文介绍了Django ORM中各种字段类型的使用方法,包括null、blank、default等属性的含义,以及如何通过Django ORM进行表记录的添加、修改和删除操作。同时,详细讲解了普通字段、外键字段及多对多字段的具体操作步骤。

     publish=models.ForeignKey(to="Publish",to_field="nid")

    书与Author表建立多对多的关系,ManyToManyField可以建在两个模型中的任意一个,自动创建第三张表
     authors=models.ManyToManyField(to='Author')  

(1)null 如果为True,Django 将用NULL 来在数据库中存储空值。 默认值是 False.

(2)blank 如果为True,该字段允许不填。默认为False。 要注意,这与 null 不同。null纯粹是数据库范畴的,而 blank 是数据验证范畴的。 如果一个字段的blank=True,表单的验证将允许该字段是空值。如果字段的blank=False,该字段就是必填的.

(3)default 字段的默认值。可以是一个值或者可调用对象。如果可调用 ,每有新对象被创建它都会被调用。

(4)primary_key 如果为True,那么这个字段就是模型的主键。如果你没有指定任何一个字段的primary_key=True, Django 就会自动添加一个IntegerField字段做为主键,所以除非你想覆盖默认的主键行为, 否则没必要设置任何一个字段的primary_key=True。

(5)unique 如果该值设置为 True, 这个数据字段的值在整张表中必须是唯一的

添加表记录

普通字段

方式1
publish_obj=Publish(name="人民出版社",city="北京",email="renMin@163.com")
publish_obj.save() 将数据保存到数据库
方式2
publish_obj=Publish.objects.create(name="人民出版社",city="北京",email="renMin@163.com")

外键字段

方式1:
   publish_obj=Publish.objects.get(nid=1)
   Book.objects.create(title="金瓶眉",publishDate="2012-12-12",price=665,pageNum=334,publish=publish_obj)
方式2:
   Book.objects.create(title="金瓶眉",publishDate="2012-12-12",price=665,pageNum=334,publish_id=1)

多对多字段

book_obj=Book.objects.create(title="追风筝的人",publishDate="2012-11-12",price=69,pageNum=314,publish_id=1)
 
author_yuan=Author.objects.create(name="yuan",age=23,authorDetail_id=1)
author_egon=Author.objects.create(name="egon",age=32,authorDetail_id=2)
 
book_obj.authors.add(author_egon,author_yuan)    #  将某个特定的 model 对象添加到被关联对象集合中。  
 
book_obj.authors.create()      #创建并保存一个新对象,然后将这个对象加被关联对象的
book_obj.authors.remove()     # 将某个特定的对象从被关联对象集合中去除。   
book_obj.authors.clear()       #清空被关联对象集合。
关联管理器
add(obj1[, obj2, ...])
把指定的模型对象添加到关联对象集中。

例如:

>>> b = Blog.objects.get(id=1)
>>> e = Entry.objects.get(id=234)
>>> b.entry_set.add(e) # Associates Entry e with Blog b.
在上面的例子中,对于ForeignKey关系,e.save()由关联管理器调用,执行更新操作。然而,在多对多关系中使用add()并不会调用任何 save()方法,而是由QuerySet.bulk_create()创建关系。

延伸:

# 1 *[]的使用
>>> book_obj = Book.objects.get(id=1)
>>> author_list = Author.objects.filter(id__gt=2)
>>> book_obj.authors.add(*author_list)


# 2 直接绑定主键
book_obj.authors.add(*[1,3])  # 将id=1和id=3的作者对象添加到这本书的作者集合中
                              # 应用: 添加或者编辑时,提交作者信息时可以用到.  

 remove(obj1[, obj2, ...])

从关联对象集中移除执行的模型对象:

>>> b = Blog.objects.get(id=1)
>>> e = Entry.objects.get(id=234)
>>> b.entry_set.remove(e) # Disassociates Entry e from Blog b.

clear()

从关联对象集中移除一切对象。 >>> b = Blog.objects.get(id=1) >>> b.entry_set.clear() 注意这样不会删除对象 —— 只会删除他们之间的关联。 就像 remove() 方法一样,clear()只能在 null=True的ForeignKey上被调用。

修改表记录

1.author=Author.objects.get(id=5)  

author.name=''韩晓飞"

author.save()

2.Publisher.objects.filter(id=2).update(name='xinghua')

注意:

<1> 第二种方式修改不能用get的原因是:update是QuerySet对象的方法,get返回的是一个model对象,它没有update方法,而filter返回的是一个QuerySet对象(filter里面的条件可能有多个条件符合,比如name='alvin',可能有两个name='alvin'的行数据)。

删除表记录

e.delete()

每个 QuerySet 都有一个 delete() 方法,它一次性删除 QuerySet 中所有的对象。

要注意的是: delete() 方法是 QuerySet 上的方法,但并不适用于 Manager 本身。这是一种保护机制,是为了避免意外地调用 Entry.objects.delete() 方法导致 所有的 记录被误删除。如果你确认要删除所有的对象,那么你必须显式地调用:

Entry.objects.all().delete() 

pubHouse = models.ForeignKey(to='Publisher', on_delete=models.SET_NULL, blank=True, null=True)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

转载于:https://www.cnblogs.com/hanxiaofeicf/p/7840828.html

Django ModelDjango Web 开发框架的核心组成部分之一,它用于数据建模,即定义和管理网站的数据结构。简而言之,Model 对象是基于你所处理的特定领域(Domain)来设计的,用来描述数据库中某类数据的特性和结构。 在 Django 中,通过 Model 可以将现实世界的事物映射到数据库中对应的表格上,同时提供了一套 API 来进行数据的增删改查(CRUD),使得开发者能够高效地操作数据库,而无需关心底层的 SQL 查询细节。 下面是一些关于 Django Model 的关键特性: ### 1. 定义模型 在 Django 中,每个模型都是一个 Python 类,这个类继承自 `django.db.models.Model` 类。你可以在这个类中定义各种属性来代表数据库中的列,例如 CharField、IntegerField、DateTimeField 等。这些字段属性决定了数据库中对应列的类型、长度以及其他特殊属性如是否允许为空、是否唯一等。 ### 2. 实现关系 Django Model 提供了多种关系类型,比如一对一(OneToOne)、一对多(ManyToOne/MultipleObjectsThrough)和多对多(ManyToMany)等,来构建复杂的数据库结构。这种关系可以在模型之间进行定义,使得数据之间的联系更为清晰直观。 ### 3. 自动生成数据库迁移 当修改模型(添加新字段、删除旧字段、改变字段类型等)时,Django 会自动生成相应的数据库迁移脚本,这些脚本可以用来创建新的表结构或者调整现有的表结构,保证数据库的完整性和一致性。 ### 4. 数据操作 API 除了定义模型之外,Django 还提供了一系列 API 来执行常见的数据库操作,包括查询、过滤、排序、分页、创建、读取、更新、删除等。这些操作可以通过模型对象来执行,使得数据处理变得非常简单且高效。 ### 5. ORM 和 SQL 性能优化 Django 使用了一种称为 Object-Relational Mapping (ORM) 的机制来处理数据库操作,这使得开发者不需要直接编写 SQL 查询就可以完成大部分数据操作。尽管如此,Django 也支持手动编写 SQL 查询,对于性能敏感的部分,可以直接使用原生的 SQL 调优技术。 ### 示例:基本的模型定义 假设我们要创建一个博客系统,其中需要有文章和作者两个实体。我们可以这样定义模型: ```python from django.db import models class Author(models.Model): name = models.CharField(max_length=100) class Article(models.Model): title = models.CharField(max_length=200) content = models.TextField() author = models.ForeignKey(Author, on_delete=models.CASCADE) ``` 在这段代码中,我们定义了两个模型:`Author` 表示作者,包含姓名;`Article` 表示文章,包含了标题、内容以及外键关联到作者,表示每篇文章都隶属于某个作者。 通过这样的模型定义,我们不仅定义了数据库的结构,还提供了一整套用于管理和操作这些数据的工具集。这对于快速构建数据驱动的 Web 应用程序至关重要。 --- 相关问题 --- 1. Django Model 中有哪些基本的字段类型及其用途是什么? 2. Django Model 如何实现数据间的一对一、一对多及多对多的关系? 3. 当修改 Django Model 结构时,是如何保证数据库的迁移和兼容性的?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值