首页 > 其他 > 详细

django学习笔记(三)模型

时间:2016-01-30 18:22:41      阅读:159      评论:0      收藏:0      [点我收藏+]

1.创建一个django app:

python manage.py startapp books

2.validate 命令检查你的模型的语法和逻辑是否正确。一旦你觉得你的模型可能有问题,运行 python manage.py validate 。 它可以帮助你捕获一些常见的模型定义错误。

3.django1.7后,数据库迁移只有三个命令

(1)migrate,用来迁移数据库。

用法:

python manage.py migrate app_name

(2)makemigrations,用来检测数据库变更和生成数据库迁移文件。

用法:

python manage.py makemigratioins app_name

(3)sqlmigrate,用来把数据库迁移文件转换成数据库语言查看(displays the SQL statements for a migratioin.)

用法:sqlmigrate app_name migration_name,比如makemigrations生成了0001_initial.py,就用sqlmigrate app 0001_intial,这里0001_initial就是migration_name参数。

python manage.py sqlmigrate app_name 0001_initial

一般如果某次migration使用sqlmigrate没有提示错误,那么在migrate时就能成功。

4.终端上输入 python manage.py 可以看到详细的命令列表,在忘记命令子名称的时候特别有用。

5.Django为模型提供了高级的Python API:

(1)创建并保存对象实例

>>> from books.models import Publisher
>>> p1 = Publisher(name=Apress, address=2855 Telegraph Avenue,
...     city=Berkeley, state_province=CA, country=U.S.A.,
...     website=http://www.apress.com/)
>>> p1.save()
>>> p2 = Publisher(name="O‘Reilly", address=10 Fawcett St.,
...     city=Cambridge, state_province=MA, country=U.S.A.,
...     website=http://www.oreilly.com/)
>>> p2.save()
>>> publisher_list = Publisher.objects.all()
>>> publisher_list
[<Publisher: Publisher object>, <Publisher: Publisher object>]

 当使用Django modle API创建对象时Django并未将对象保存至数据库内,除非调用`` save()`` 方法。

如果需要一步完成对象的创建与存储至数据库,就使用`` objects.create()`` 方法。

>>> p1 = Publisher.objects.create(name=Apress,
...     address=2855 Telegraph Avenue,
...     city=Berkeley, state_province=CA, country=U.S.A.,
...     website=http://www.apress.com/)
>>> p2 = Publisher.objects.create(name="O‘Reilly",
...     address=10 Fawcett St., city=Cambridge,
...     state_province=MA, country=U.S.A.,
...     website=http://www.oreilly.com/)
>>> publisher_list = Publisher.objects.all()
>>> publisher_list

(2)为了把不同对象实例区分开,可以用__unicode()__方法给他们起名字。

from django.db import models

class Publisher(models.Model):
    name = models.CharField(max_length=30)
    address = models.CharField(max_length=50)
    city = models.CharField(max_length=60)
    state_province = models.CharField(max_length=30)
    country = models.CharField(max_length=50)
    website = models.URLField()

    def __unicode__(self):
        return self.name

这样的话:

>>> from books.models import Publisher
>>> publisher_list = Publisher.objects.all()
>>> publisher_list
[<Publisher: Apress>, <Publisher: OReilly>]

(3)对某一个字段修改后再save,所有字段都会更新。所以要更改某一指定的列,我们可以调用结果集(QuerySet)对象的update()方法,更好。

>>> Publisher.objects.filter(id=52).update(name=Apress Publishing)
>>> Publisher.objects.all().update(country=USA)

(4)数据过滤

>>> Publisher.objects.filter(country="U.S.A.", state_province="CA")#多个参数相当于SQL里的AND语句
[<Publisher: Apress>]

 

django学习笔记(三)模型

原文:http://www.cnblogs.com/zywscq/p/5171321.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!