寂寞的阿呆

导航

模板基础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= 'jinpingmei',publishDate= '2017-12-01',price= 665,pageNum=334,pubulish=pubulish_obj)

方式2:
Book.objects.create(title= 'jinpingmei',publishDate= '2017-12-01',price= 665,pageNum=334,pubulish_id=1)

#关键点 book_obj.publish 是什么?

 

posted on 2017-11-21 08:48  寂寞的阿呆  阅读(164)  评论(0)    收藏  举报