`
喜欢蓝色的我
  • 浏览: 367259 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

django Django--Model中的ManyToManyField及页面显示

 
阅读更多

多对多的模式:

1. 新建项目

命令:django-admin.py startproject csvt06

2.建app

命令:python manage.py startapp blog

3.修改seting.py

数据库选择sqlite3

DATABASES = {

    'default': {

        'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.

        'NAME': 'csvt',                      # Or path to database file if using sqlite3.

        'USER': '',                      # Not used with sqlite3.

        'PASSWORD': '',                  # Not used with sqlite3.

        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.

        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.

    }

}

app打开admin 、添加blog

INSTALLED_APPS = (

    'django.contrib.auth',

    'django.contrib.contenttypes',

    'django.contrib.sessions',

    'django.contrib.sites',

    'django.contrib.messages',

    'django.contrib.staticfiles',

    # Uncomment the next line to enable the admin:

     'django.contrib.admin',

    # Uncomment the next line to enable admin documentation:

    # 'django.contrib.admindocs',

'blog',

)

4.在blog下编辑models.py

from django.db import models

 

# Create your models here.

class Author(models.Model):

name = models.CharField(max_length =30)

 

def __unicode__(self):

return self.name

 

class Book(models.Model):

name = models.CharField(max_length =30)

authors = models.ManyToManyField(Author)         #创建多对多的关系

 

def __unicode__(self):

return self.name

5.在命令行执行命令:python manage.py syncdb

 

表 blog_book_authors 中存放着表blog_book 和表blog_author的关联关系

用户名:km 密码:123456

6.运行交换shell命令:ipython manage.py shell

在交换窗口输入下面值,blog_author表中创建四个数据

from blog.models import Author ,Book

Author.objects.crea

Author.objects.create(name='Alen')

Author.objects.create(name='Ben')

Author.objects.create(name='Carl')

Author.objects.create(name='Dev')

authors = Author.objects.all()

authors

返回四个author的name

bl = Book()

b1.name = 'python book1'

b1.save()

取出Author中的Alen赋值给alen ‘name__exact’相当于sql 中的like

alen = Author.objects.get(name__exact = 'Alen')

alen

添加对应关系表

b1.authors.add(alen)

b1.authors.add(authors[1])

b1.authors.add(authors[2])

b1.authors.add(authors[3])

b1.author.all

删除对应关系表中的authors中的alen元素

b1.authors.remove(alen)

bl.authors.filter(name__exact='Carl')

 查看alen属性

alen.book_set.all()

添加对应关系,把alen和b1添加关联

alen.book_set.add(b1)

alen.book_set.all()

alen.book_set.create(name = 'python book2')

alen.book_set.all()

 

 

显示[<Book: python book1>,<Book:python book2>]

 

删除book中的第一个书

alen.book_set.remove(books[0])

shell中循环显示作者和他的书

for author in Author.objects.all():

    for book in author.book_set.all():

        print book

python book1

python book2

python book1

python book1

python book1

 

 

from blog.mobels import Author

alen = Author.objects.filter(name='Alen')

alen

通过shell添加一本书

alen.book_set.create(name='web1 book');

from blog.models import Book

books = Book.objects.all()

books

books[0]

b1 = books[0]

 

bl.authors.all()

7.在blog中添加views.py

# Create your views here.

from blog.models import Author,Book

from django.shortcuts import render_to_response

 

def show_author(req):

authors = Author.objects.all()

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

 

 

def show_book(req):

books = Book.objects.all()

 

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

8.在项目中添加url.py

from django.conf.urls.defaults import patterns, include, url

 

# Uncomment the next two lines to enable the admin:

# from django.contrib import admin

# admin.autodiscover()

 

urlpatterns = patterns('',

    # Examples:

    # url(r'^$', 'temp.views.home', name='home'),

    # url(r'^temp/', include('temp.foo.urls')),

 

    # Uncomment the admin/doc line below to enable admin documentation:

    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

 

    # Uncomment the next line to enable the admin:

    # url(r'^admin/', include(admin.site.urls)),

url(r'^blog/show_author/$','blog.views.show_author'),

url(r'^blog/show_book/$','blog.views.show_book'),

)

9.在blog下建文件夹templates,新建模板文件show_author.html 和show_book.html

show_author.html-----循环显示每个作者的书

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

 <head>

  <title> New Document </title>

  <meta name="Generator" content="EditPlus">

  <meta name="Author" content="">

  <meta name="Keywords" content="">

  <meta name="Description" content="">

 </head>

 

 <body>

  {% for author in authors%}

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

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

 <li>{{book}}</li>

   

      {%endfor%}

  {%endfor%}

 </body>

</html>

show_book.html----循环每本书的作者

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

 <head>

  <title> New Document </title>

  <meta name="Generator" content="EditPlus">

  <meta name="Author" content="">

  <meta name="Keywords" content="">

  <meta name="Description" content="">

 </head>

 

 <body>

  {% for book in books%}

      <div>

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

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

     <li>{{author}}</li>

 {%endfor%}

 

 </div>

  {%endfor%}

 </body>

 

</html>

10.命令行运行自动服务器

命令:python manage.py runserver

访问地址:http://127.0.0.1:8000/blog/show_book/

http://127.0.0.1:8000/blog/show_author/

完成

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    Python库 | django-gm2m-0.2.2.zip

    Django原生的`ManyToManyField`虽然功能强大,但在某些特定场景下可能无法满足复杂的需求,比如需要在数据库层面直接进行批量操作时。`django-gm2m` 库就填补了这个空白,提供了更高效、灵活的多对多管理方式。 这...

    Django-1-2-PDF-Documentation-For-Offline-Reading.pdf

    - **设计模型**:在 Django 中,应用程序的核心是模型(Model),模型定义了数据结构以及如何与数据库进行交互。设计模型时需要考虑数据表中的字段类型、字段之间的关系等。 - **安装配置**:Django 的安装非常简单...

    Django-1.8.2-中文文档

    Django模型继承自`django.db.models.Model`类,并定义模型的必要字段和行为。模型中的每个属性代表数据库中的一个字段,而Django提供了一套自动生成的用于数据库访问的API。 在Django中定义模型字段时,开发者可以...

    Python库 | django-modelclone-0.6.1.tar.gz

    例如,可能会增加对Django最新版本的支持,优化复制过程的效率,或者添加了对某些特殊字段类型(如ManyToManyField)的处理。 安装这个库通常可以通过pip命令完成,如下: ``` pip install django-modelclone ``` ...

    Python库 | django-m2m-history-0.3.3.tar.gz

    **多对多关系(ManyToManyField)** 是Django ORM中的一个关键概念。在数据库设计中,多对多关系表示两个模型之间可能存在多个匹配项。例如,用户可以属于多个组,同时一个组也可以有多个用户。Django通过中间表来...

    models_django管理_django_django的一个model_

    在Django框架中,Model是数据模型的抽象,它是Django ORM(对象关系映射)的核心部分,允许开发者用Python代码定义数据库表的结构。在这个特定的场景中,"models_django管理_django_django的一个model_"的标题暗示了...

    Python库 | django-modelforms-0.1.1.tar.gz

    首先,我们要了解Django中的模型(Model)。模型是数据的蓝图,定义了数据库表格的结构,包括字段类型、约束等。例如,一个简单的用户模型可能包含用户名、密码、电子邮件等字段。通过模型,我们可以直接操作数据库...

    django-tracking-fields:允许在管理站点中跟踪对象字段的Django应用

    允许在管理站点中跟踪对象字段的Django应用。 要求 Django 2.2:有关Django早期版本的信息,请参见旧版本。 django-cuser:仅当您要跟踪哪个用户进行了修改时。 快速开始 将“ tracking_fields”添加到您的...

    django1.3.1

    首先,Django 1.3.1 提供了模型(Model)层的增强,这是框架的核心部分,用于处理数据库交互。在这个版本中,你可以利用新的 `OneToOneField` 和 `ManyToManyField` 的 `related_name` 属性,为反向查询提供更灵活的...

    《Django实战》源码(第一、第二版) .zip

    2. **模型(Model)**:Django的数据模型是与数据库交互的核心,通过定义模型类来创建数据库表。学习如何定义模型字段,如CharField、IntegerField等,以及如何处理关系,如OneToOneField、ForeignKey和...

    在Django admin中编辑ManyToManyField的实现方法

    本文将详细讲解如何在Django admin中实现对ManyToManyField的有效编辑。 1. **定义多对多关系** Django ORM(对象关系映射)允许开发者通过模型(models)定义数据结构。对于多对多关系,可以使用`ManyToManyField...

    django-social-app

    Django 的模型关系(如 ForeignKey 和 ManyToManyField)可以帮助我们构建用户之间的关注和好友系统。 - **Notifications**: 提醒用户有关他们关注的人或事物的最新动态。Django 可以结合模板标签和后台任务(如 ...

    Django-Model数据库操作(增删改查、连表结构)详解

    在Django框架中,Model是数据模型层的核心,它提供了与数据库交互的接口。本文将深入探讨Django-Model的数据库操作,特别是增删改查(CRUD)和连表结构。 1. 增(Create) 在Django中创建数据库记录通常是通过创建...

    项目实战 Python Django 个人网站 电影推荐网站 完整代码

    此外,评论功能通常涉及多对多关系,Django的ManyToManyField字段可以帮助处理这种关系。 5. **代码注释与可读性** 项目提供的代码注释详细,有助于初学者理解代码逻辑和Django的工作原理,对于自我学习和团队协作...

    Django Model

    在Python的Web开发框架Django中,Model是数据模型的基石,它提供了与数据库交互的抽象层。Django的ORM(对象关系映射)使得开发者可以使用Python类来定义数据库表结构,而无需直接编写SQL语句。这种高级抽象层极大地...

    Django官方文档中文翻译(models部分)

    在这个“Django官方文档中文翻译(models部分)”中,我们将会深入探讨Django的核心组件之一——模型(Models),它是数据层的核心,用于定义数据库结构和业务逻辑。 一、模型(Models)基础 1. 定义模型:模型是...

    django外键关系的model互相读取数据.docx

    在Django中,模型(Model)是ORM(对象关系映射)的核心,它允许开发者用Python类来定义数据库表结构。在这个例子中,我们有三个模型:`Blog`、`Author`和`Entry`,它们之间存在外键(ForeignKey)和多对多...

    django-mongom2m:Django MongoDB ManyToManyField 实现

    `django-mongom2m` 是一个专门针对 Django 框架与 MongoDB 数据库结合使用的扩展库,它提供了对 MongoDB 中特有的 ManyToManyField(多对多关系)的支持。在 Django 中,原生的 ORM(对象关系映射)系统主要设计用于...

    django 总结资料

    在Django框架中,通过`manage.py`脚本可以方便地管理整个应用。以下是一些常用的服务管理命令及其功能介绍: 1. **基本命令**: - `python manage.py help`:显示帮助文档。 - `python manage.py shell -h`:查看...

Global site tag (gtag.js) - Google Analytics