`

Django6(模型)

阅读更多
1. models.py
  
    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=50)
        website = models.URLField()

        def __unicode__(self):
            return self.name

    class Author(models.Model):
        first_name = models.CharField(max_length=30)
        last_name = models.CharField(max_length=40)
        email = models.EmailField()

        def __unicode__(self):
            return u'%s%s'% (self.first_name, self.last_name)

    class Book(models.Model):
        title = models.CharField(max_length=100)
        authors = models.ManyToManyField(Author)
        publisher = models.ForeignKey(Publisher)
        publication_date = models.DateField()

        def __unicode__(self):
            return self.title
   


2. 模型安装
   $ vim settings.py
   修改INSTALLED_APPS为:
  
    INSTALLED_APPS = (
        'mysite.books',
    )
   

   修改MIDDLEWARE_CLASSES为:
  
    MIDDLEWARE_CLASSES = ( 
    )
   

   INSTALLED_APPS告诉Django项目哪些app处于激活状态。

3. 创建数据库:
   $ python manage.py validate   # 校验模型的有效性
   $ python manage.py sqlall books # 生成CREATE TABLE语句
              # 这里的books是app的名称,和运行manage.py startapp 中的一样
   $ python manage.py syncdb  # 同步模型到数据库

4. 基本数据访问:
   一旦创建了模型, Django自动为这些模型提供了高级的Python API。
   $ python manage.py shell
  
  
    >>> from books.models import Publisher
    >>> p1 = Publisher(name='Apress', address='2855 Telegraph Avenue',
    ...     city='Berkeley', state_province='CA',
    ...     website='http://www.apress.com/')
    >>> p1.save()        # 存进数据库
    >>> p2 = Publisher(name='Thk', address='2855 Telegraph Avenue',
    ...     city='Berkeley', state_province='CA',
    ...     website='http://www.apress.com/')
    >>> p2.save()
    >>> publisher_list=Publisher.objects.all() 
    >>> publisher_list
   

   上述代码等价于:
  
    >>> from books.models import Publisher
    >>> p1 = Publisher.objects.create(name='Apress', 
    ...     address='2855 Telegraph Avenue',
    ...     city='Berkeley', state_province='CA',
    ...     website='http://www.apress.com/')
    >>> p2 = Publisher.objects.create(name='Thk', 
    ...     address='2855 Telegraph Avenue',
    ...     city='Berkeley', state_province='CA',
    ...     website='http://www.apress.com/')
    >>> publisher_list=Publisher.objects.all() 
    >>> publisher_list
   

   更新(update):
  
    >>> p2.name='Thinking'
    >>> p2.save()
    >>> p2
   

   数据过滤
  
    >>> Publisher.objects.filter(name='Thinking')
   

   数据过滤(包含性查找)
  
    >>> Publisher.objects.filter(name__contains='Thin')
   

   其他的一些查找类型有: icontains(大小写无关的LIKE), startswith 和
   endswith, 还有range(SQL BETWEEN查询)

   获取单个对象:
  
    >>> Publisher.objects.get(name="Apress")
   


   数据排序:
  
    >>> Publisher.objects.order_by('name')
   

  
   修改代码,提供默认排序:
  
    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=50)
        website = models.URLField()

        def __unicode__(self):
            return self.name

        class Meta:
            ordering = ['name']
   


   连锁查询:
  
    >>> Publisher.objects.filter(city='Berkeley').order_by("-name")
   


   限制返回的数据:(只取出一个)
  
    >>> Publisher.objects.order_by('name')[0]  
        or
    >>> Publisher.objects.order_by('name')[0:1]
   

  
   Django不支持Python的负索引,但是可以用以下取代:
  
    >>> Publisher.objects.order_by('-name')[0]
   


   更新多个对象:
  
    >>> p = Publisher.objects.get(name='Apress')
    >>> p.name = 'Apress Publishing'
    >>> p.save()
   

   上面的save()方法更新了不仅仅是name列的值,还更新了所有的列。
   更改某一指定的列,可以调用结果集(QuerySet)对象的update()方法:
  
    >>> Publisher.objects.filter(id=1).update(name='Apress')
   

   同时,更新多条记录:
  
    >>> Publisher.objects.all().update(address='Hotel')
   


   删除对象:
  
    >>> p2 = Publisher.objects.get(name='Thinking')
    >>> p2.delete()
   

  
    >>> Publisher.objects.filter(address='Hotel').delete()
   

  
    >>> Publisher.objects.all().delete()
   

分享到:
评论

相关推荐

    python的Django框架模型

    Django模型通常在应用的`models.py`文件中定义。每个模型是一个Python类,继承自内置的`django.db.models.Model`基类。例如: ```python from django.db import models class Article(models.Model): title = ...

    Python-Django模型字段加密解密您的数据并加密保存至数据库中

    luojilab-django-mirage-field-5d96836是一个这样的库,它提供了一种简单的方法来加密Django模型的字段。通过这个库,我们可以在保存到数据库之前自动加密数据,在从数据库读取后自动解密。这样,即使数据库被非法...

    8. Django 表单与模型

    ### Django模型(Models) **1. 模型的概念** Django模型是数据库交互的主要接口,它定义了数据库表的结构,包括字段类型、验证规则等。通过创建一个Python类,我们可以声明模型,并自动地生成数据库迁移,从而...

    django框架模型层功能、组成与用法分析

    本文实例讲述了django框架模型层功能、组成与用法。分享给大家供大家参考,具体如下: Django models是Django框架自定义的一套独特的ORM技术。 使用该层开发的首要任务就是定义模型类以及属性。每个模型都可以被映射...

    Django(三)模型与数据库

    首先,Django模型是Python类,它们继承自`django.db.models.Model`基类。模型中的每个类属性都代表数据库表中的一个字段。例如,假设我们有一个`User`模型,可以这样定义: ```python from django.db import models...

    django-wham, REST api伪装为 Django ORM模型.zip

    django-wham, REST api伪装为 Django ORM模型 wham作为 Django ORM模型的 REST api使用 django-wham,你可以按照查询 Django 模型的方式来查询 REST api:>>> artist = SpotifyArtist.

    django模型专题笔记

    **Django 模型专题笔记** 在 Django 中,模型(Model)是数据库的抽象层,它是数据结构的主要定义部分,负责描述应用中的数据以及数据的行为。本笔记将深入探讨 Django 模型的各个方面,帮助你更好地理解和运用这一...

    django-swappable-models, 交换非官方 Django 可以交换模型 API.zip

    django-swappable-models, 交换非官方 Django 可以交换模型 API 交换交换模式- 不再只用于 auth.User !swap是一个非正式的API,用于文档,但它具有强大的功能: 可以交换模型。交换器便于在你自己的可以重用应用...

    Python-动态创建一个模型的多个tablename并通过DjangoORM操作

    接下来,我们可以像操作常规Django模型一样操作这些动态模型。例如,创建、查询、更新和删除数据: ```python # 创建数据 table1_instance = Table1(common_field='data1') table1_instance.save() # 查询数据 ...

    基于django垃圾邮件分类多种模型在线部署页面展示源码+说明文档.zip

    基于django垃圾邮件分类多种模型在线部署页面展示源码+说明文档.zip基于django垃圾邮件分类多种模型在线部署页面展示源码+说明文档.zip基于django垃圾邮件分类多种模型在线部署页面展示源码+说明文档.zip基于django...

    django-modeltranslation, 使用注册方法翻译 Django 模型.zip

    django-modeltranslation, 使用注册方法翻译 Django 模型 Modeltranslationmodeltranslation应用程序用于将现有 Django 模型的动态内容转换为任意数量的语言,而不必更改原始模型类。 它使用注册方法( 与 Django ...

    基于Django构建在线文本分类预测系统代码、模型、数据集:SVM模型在线预测与部署 基于 Django 3.2 框架

    基于Django构建在线文本分类预测系统代码、模型、数据集:SVM模型在线预测与部署 基于 Django 3.2 框架,参考博客:https://blog.csdn.net/wangyaninglm/article/details/116334297

    Django:Django模型设计与数据库操作.docx

    Django:Django模型设计与数据库操作.docx

    7. Django 模型与数据库

    "Django模型与数据库"这个主题是Django核心概念中的关键部分,主要涉及如何通过Django来设计、操作和管理数据库。在这个主题中,我们将深入探讨Django模型的定义、数据库操作以及与数据库的交互方式。 首先,Django...

    django模型models中常用字段和参数

    django模型models中常用字段和参数

    Python-轻松整合Django模型的常见行为

    本文将深入探讨如何轻松整合Django模型的常见行为,以提升开发效率和应用的可维护性。 首先,让我们了解Django模型。在Django中,模型(Model)是数据库表的抽象层,用于定义数据结构和业务逻辑。通过在模型类中...

    django笔记 django笔记

    Django是由两位美国开发者在2005年创建的开源项目,它遵循MVC(模型-视图-控制器)设计模式,但更倾向于MTV(模型-模板-视图)架构。Django的核心组件包括ORM(对象关系映射)、数据库路由系统、强大的表单处理和...

    django-fernet-fields, Django 模型字段的Fernet对称加密.zip

    django-fernet-fields, Django 模型字段的Fernet对称加密 django-fernet-fields Fernet 用于 Django 模型字段的对称加密,使用库。在 python 。3.3 。3.4.3.5.3.6.pypy和pypy3上,django-fernet-fiel

    django-dirtyfields, 在 Django 模型中,跟踪脏字段.zip

    django-dirtyfields, 在 Django 模型中,跟踪脏字段 Django 脏字段 跟踪 Django 模型实例上的脏字段。 Dirty表示内存和数据库值中的字段是不同的。这个软件包是兼容的,并用最新版本的Django ( 1.8.1.9.1.10.系列) ...

Global site tag (gtag.js) - Google Analytics