Python学习笔记-数据库的使用(三)

1       Django中表之间关系many-to-one

1)         新建项目、应用

#django-admin.py startproject web_05

#django_admin.py startapp blog

2)         修改settings.py

3)         创建数据库名称

#mysql –u root –p

Mysql>create database web_05 default charset=utf8;

4)         编码models.py

from django.db import models

 

class Animal(models.Model):

        name = models.CharField(max_length=20)

 

        def __unicode__(self):

                return self.name

 

class Dog(models.Model):

        name = models.CharField(max_length=15)

        anim = models.ForeignKey(Animal)

 

        def __unicode__(self):

                return self.name

5)         创建对象

#python manage.py shell                            (进入解释器环境)

a)         创建对象one:

>>>a1 = Animal.objects.create(name = ‘A1’)

>>>a2 = Animal.objects.create(name = ‘A2’)

>>>a3 = Animal.objects.create(name = ‘A3’)

b)         创建对象many:

>>>dog1 = Dog.objects.create(name = ‘d1’, anim = a1)

6)         查看

>>>dog1.anim(利用many)

>>>a1.blog_set.all()(利用one的结果集合)

2       Admin后台管理数据库

2.1     创建admin的账户和密码

#python manage.py createsuperuser

1)         Settings.py 与urls.py不需要修改

2)         编码models.py

3)         注册Person类

#vim blog/admin.py

from django.contrib import admin

from blog.models import Person

admin.site.register(Person)

 

3       Django中表之间关系Many-to-Many

1)         创建工程、应用

2)         创建数据库名称

#mysql –uroot –p

Mysql>create database web_07;

3)         设置blog/settings.py

4)         编码blog/models.py

from django.db import models

 

class Author(models.Model):

        name = models.CharField(max_length=20)

        def __unicode__(self):

                return self.name

 

class Book(models.Model):

        name = models.CharField(max_length=20)

        authors = models.ManyToManyField(Author)

        def __unicode__(self):

                return self.name

5)         更新数据库

#python manage.py makemigrations blog(应用名称)

#python manage.py migrations

6)         对models的对象进行操作

#python manage.py shell

l  对Author操作

>>>Author.objects.create(name = ‘Sheldon’)

>>> Author.objects.create(name = 'Penny')

>>> Author.objects.create(name = 'Leonard')

>>> Author.objects.create(name = 'Howard')

l  对Book操作

>>>book1 = Book()

>>>book1.name = ‘The Big Bang’

>>>book1.save()

>>>author = Author.objects.all()

>>>book1.authors.add(author[0])(添加author)

>>>p = Author.objects.get(name__exact = ‘Penny’)或创建时p = Author.objects.create(name = 'Penny')

>>>book1.authors.add(p) (添加author)

>>>book1.authors.remove(p)(删除author)

l  对Author操作

>>>p.book_set.add(book1)(添加book)

>>>p.book_set.create(name = ‘python book’) (添加book)

>>>books = Book.objects.all()

>>>p.book_set.remove(books[1])(删除book)

>>>books(books[1]仍显示)

>>>p.book_set.all()(books[1]被删除)

4       多对多表在web中显示

1)         编辑模板文件index.html

#mkdir blog/templates/index.html

#vim blog/templates/index.html

<html>

{% for author in authors %}

<div>

        <h3>{{author.name}}</h3>

        {% for book in author.book_set.all %}

        <li>{{book.name}}</li>

        {% endfor %}

</div>

{% endfor %}

</html>

2)         设置urls.py

3)         编辑blog/views.py

from django.shortcuts import render_to_response

from blog.models import Author,Book

 

def show_author(req):

        authors = Author.objects.all()

        return render_to_response('index.html', {'authors':authors})

 

def show_book(req):

        books = Book.objects.all()

        return render_to_response('index1.html', {'books':books})

4)         启动django内置服务器

#pyhton manage.py runserver

posted @ 2018-03-07 13:59  程先森  阅读(427)  评论(0)    收藏  举报