`

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()
   

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics