模板基础model

一.Django-model基础

1.1ORM

映射关系:

表名<---------->类名

字段<---------->属性

表记录<---------->类实例对象

1.2创建表(建立模型)

模型如下:

class Author(models.Model):
nid = models.AutoField(primary_key=True)
name=models.CharField( max_length=32)
age=models.IntegerField() # 与AuthorDetail建立一对一的关系
authorDetail=models.OneToOneField(to="AuthorDetail") class AuthorDetail(models.Model): nid = models.AutoField(primary_key=True)
birthday=models.DateField()
telephone=models.BigIntegerField()
addr=models.CharField( max_length=64) class Publish(models.Model):
nid = models.AutoField(primary_key=True)
name=models.CharField( max_length=32)
city=models.CharField( max_length=32)
email=models.EmailField() class Book(models.Model): nid = models.AutoField(primary_key=True)
title = models.CharField( max_length=32)
publishDate=models.DateField()
price=models.DecimalField(max_digits=5,decimal_places=2)
keepNum=models.IntegerField()<br> commentNum=models.IntegerField() # 与Publish建立一对多的关系,外键字段建立在多的一方
publish=models.ForeignKey(to="Publish",to_field="nid") # 与Author表建立多对多的关系,ManyToManyField可以建在两个模型中的任意一个,自动创建第三张表
authors=models.ManyToManyField(to='Author')  

通过loggin可以查看被翻译成的sql语句:

LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console':{
'level':'DEBUG',
'class':'logging.StreamHandler',
},
},
'loggers': {
'django.db.backends': {
'handlers': ['console'],
'propagate': True,
'level':'DEBUG',
},
}
}   #loggin 放在settings里面

注意事项:

1.表的名称myapp_modelName,是根据模型中的元素数据自动生成的,也可以覆写为别的名称

2.id字段是自动添加的

3.对于外键字段,Django会在字段上添加“_id”来创建数据库中的列名。

4.这个例子中的create_table SQL

5.定义好模型后,你需要告诉django,使用这个模型,你要做的就是修改配置文件中的Install_appsz中设置,在其中添加models.py所应用的名称。

6.外键字段foreignkey有一个Null=True的设置(它允许外键接收Null值),你可以赋值给它控制None。

字段选项:

每个字段有一些特有的参数,例如:CharFiled需要Max_lengh参数来指定varchar数据库字段的大小。还有一些适用于所有字段的参数。这些参数在文档中有详细定义,这里我们只简单介绍一些最常用的:

(1)null

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

(1)blank

如果为True,该字段允许不填。默认为False。
要注意,这与 null 不同。null纯粹是数据库范畴的,而 blank 是数据验证范畴的。
如果一个字段的blank=True,表单的验证将允许该字段是空值。如果字段的blank=False,该字段就是必填的。 (2)default 字段的默认值。可以是一个值或者可调用对象。如果可调用 ,每有新对象被创建它都会被调用。 (3)primary_key 如果为True,那么这个字段就是模型的主键。如果你没有指定任何一个字段的primary_key=True,
Django 就会自动添加一个IntegerField字段做为主键,所以除非你想覆盖默认的主键行为,
否则没必要设置任何一个字段的primary_key=True。 (4)unique 如果该值设置为 True, 这个数据字段的值在整张表中必须是唯一的 (5)choices
由二元组组成的一个可迭代对象(例如,列表或元组),用来给字段提供选择项。 如果设置了choices ,默认的表单将是一个选择框而不是标准的文本框,而且这个选择框的选项就是choices 中的选项。 这是一个关于 choices 列表的例子: YEAR_IN_SCHOOL_CHOICES = (
('FR', 'Freshman'),
('SO', 'Sophomore'),
('JR', 'Junior'),
('SR', 'Senior'),
('GR', 'Graduate'),
)
每个元组中的第一个元素,是存储在数据库中的值;第二个元素是在管理界面或 ModelChoiceField 中用作显示的内容。 在一个给定的 model 类的实例中,想得到某个 choices 字段的显示值,就调用 get_FOO_display 方法(这里的 FOO 就是 choices 字段的名称 )。例如: from django.db import models class Person(models.Model):
SHIRT_SIZES = (
('S', 'Small'),
('M', 'Medium'),
('L', 'Large'),
)
name = models.CharField(max_length=60)
shirt_size = models.CharField(max_length=1, choices=SHIRT_SIZES) >>> p = Person(name="Fred Flintstone", shirt_size="L")
>>> p.save()
>>> p.shirt_size
'L'
>>> p.get_shirt_size_display()
'Large'

更多详见:http://python.usyiyi.cn/documents/django_182/ref/models/fields.html#manytomany-arguments

1.2 添加表记录

1.2.1 普通字段

方式1:
publish_obj = Publish(name = '人民出版社',city='北京',email='zzx@163.com')
pubulish.save() #将数据保存到数据库 方式2: <br>返回值publish_obj是添加的记录对象
pubulish_obj =Publish.objects.create(name = '人民出版社',city='北京',email='zzx@163.com')
<br> 方式3
<br>表.objects.create(**request.POST.dict())

1.2.2 外键字段

方式1:
publish_obj = Publish.objects.get(id =1)
Book.objects.create(title= '*mei',publishDate= '2017-12-01',price= 665,pageNum=334,pubulish=pubulish_obj) 方式2:
Book.objects.create(title= '*mei',publishDate= '2017-12-01',price= 665,pageNum=334,pubulish_id=1) #关键点 book_obj.publish 是什么?
上一篇:SpringSecurity身份验证基础入门


下一篇:NodeJS包管理工具——npm入门