Django 学习 (第五部)

表设计:

from django.db import models

# Create your models here.
# class Foo(models.Model):
#     name = models.CharField(max_length=1)


class Business(models.Model):
    # id
    caption = models.CharField(max_length=32)
    code = models.CharField(max_length=32,null=True,default="SA")
    # fk = models.ForeignKey('Foo')

class Host(models.Model):
    nid = models.AutoField(primary_key=True)
    hostname = models.CharField(max_length=32,db_index=True)
    ip = models.GenericIPAddressField(protocol="ipv4",db_index=True)
    port = models.IntegerField()
    b = models.ForeignKey(to="Business", to_field='id')
#
class Application(models.Model):
    name = models.CharField(max_length=32)
    r = models.ManyToManyField("Host")
'''
Models 层是 Django 框架中最强大的部分之一, 大大方便了 Web 层与数据层的交互。
由于对 Model 层缺少系统理解,在使用 model Api 时经常需要查找文档,
 在此做一次系统地整理。

 一个model类对应数据库中的一张表, 类中的属性代表数据库中的各个字段。 类实例化后的对象, 代表数据库中的一条记录。

'''
'''
3、filter 级联

        filter,
        exclude (不包含)等方法不仅仅可以单独使用, 也可以级联进行使用


   创建 model 对象

Model 对象实例化之后,可以调用 save() 方法其写入到数据库。
from blog.models import Blog

# 实例化对象
b = Blog(name='Beatles Blog', tagline='All the latest Beatles news.')
# 将对象写入数据库
b.save()



当执行 save() 函数时, ORM 会执行 INSERT SQL 语句, 将数据写入数据库。在调用 save() 函数之前, 实例不会执行 INSERT 操作。
保存对象更新

假设: 上例中的 b 实例已经存入数据库, 现在要更新 b 中的 tagline 字段。先更新 tagline 对应的值,然后执行 save() 操作。如下:
#更新 tagline 字段
b.tagline = 'All the latest Beatles new 03/28'
# 将更新写入数据库
b.save()



例: 查询姓名为 paul 的作者:
# 返回的 QuerySet 对象中只包含 name='paul' 的 model 对象
Author.objects.filter(name='paul')



例: 查询姓名不为 paul 的所有作者:
# 返回的 QuerySet 对象中,不包含 name='pual' 的 model 对象
Author.objects.exclude(name='paul')


上面介绍的 filter() 等方法返回的结果是 QuerySet 对象。如果明确知道有且只有一个对象可以查询到时,可以使用 get() 方法进行查询, 其返回结果为一个 model 对象。
1

one_entry = Entry.objects.get(pk=1)



返回的 one_entry 为 model 对象, 而不是 QuerySet 对象。
采用这种方法查询是,如果查询结果为空,将抛出 DoesNotExist 异常。在一般情况下,不建议使用可以使用如下方式代替:

one_entry = Entry.objects.filter(pk=1)
if one_entry.exists():
one_entry = one_entry[0]



pk 缩写

在 Django 中采用 pk 缩写来表示 ‘primary key’, 表中的 id (primary key) 主键 字段,可以使用 pk 来表示
例如: 下面的查询语句等价

Blog.objects.get(id__exact=13)
Blog.objects.get(id=13)
Blog.objects.get(pk=13)

'''


具体参见:# https://www.cnblogs.com/zhaoyingjie/p/6984957.html

Django下的migrations

Django migrations的时候我们可能遇到两个工具:

django-admin和manage.py。

其实它们的作用是一样的,不同的是

django-admin是存放在python的site-packages/django/bin路径,

manage.py是在创建project的时候生成的。使用django-admin可以对不同的项目进行设置。

Migrations主要包括以下几个命令:

makemigrations

作用:根据model的变化生成对应的python代码,该代码用于更新数据库。

语法:django-admin makemigrations [app_label [app_label ...]]

如果没有填写任何参数,django会检查所有应用程序中的model变化生成python脚本

,脚本存放在每个应用下面一个叫做migrations的文件夹下,脚本名字类似0001_initial.py格式。

相关推荐