博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django—model
阅读量:5122 次
发布时间:2019-06-13

本文共 3169 字,大约阅读时间需要 10 分钟。

     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

你可能感兴趣的文章
Dirichlet分布深入理解
查看>>
字符串处理
查看>>
HtmlUnitDriver 网页内容动态抓取
查看>>
ad logon hour
查看>>
获得进程可执行文件的路径: GetModuleFileNameEx, GetProcessImageFileName, QueryFullProcessImageName...
查看>>
证件照(1寸2寸)拍摄处理知识汇总
查看>>
罗马数字与阿拉伯数字转换
查看>>
Eclipse 反编译之 JadClipse
查看>>
Python入门-函数
查看>>
距离公式汇总以及Python实现
查看>>
一道不知道哪里来的容斥题
查看>>
Window7上搭建symfony开发环境(PEAR)
查看>>
Linux内核态、用户态简介与IntelCPU特权级别--Ring0-3
查看>>
第23月第24天 git命令 .git-credentials git rm --cached git stash clear
查看>>
java SE :标准输入/输出
查看>>
一些方便系统诊断的bash函数
查看>>
jquery中ajax返回值无法传递到上层函数
查看>>
[ JAVA编程 ] double类型计算精度丢失问题及解决方法
查看>>
小别离
查看>>
好玩的-记最近玩的几个经典ipad ios游戏
查看>>