首页 > 编程语言 > 详细

Python 【第十四章】django 数据操作之model 之多对多操作

时间:2017-01-29 10:44:10      阅读:252      评论:0      收藏:0      [点我收藏+]

model多对多操作
- 创建
a. 方式一:
class B2G(models.Model):                  #人工创建第三张表
b_id = models.ForeignKey(‘Boy‘)
g_id = models.ForeignKey(‘Girl‘)

class Boy(models.Model):

username = models.CharField(max_length=16)

class Girl(models.Model):

name = models.CharField(max_length=16)

b. 方式二:
class Boy(models.Model):

username = models.CharField(max_length=16)
# girl_set
class Girl(models.Model):

name = models.CharField(max_length=16)

b = models.ManyToManyField(‘Boy‘)     #由django自动创建 第三张表

 

 多对多例:

 

models.py

class Boy(models.Model):

    username = models.CharField(max_length=16)
    # girl_set
class Girl(models.Model):
    name = models.CharField(max_length=16)
    b = models.ManyToManyField(Boy)

 

urls.py

from django.conf.urls import url
from django.contrib import admin
from app01 import views

urlpatterns = [
    # url(r‘^admin/‘, admin.site.urls),
    url(r^index/,views.index),
    url(r^add_user_type/,views.add_user_type),
    url(r^add_boy/, views.add_boy),
    url(r^add_girl/, views.add_girl),
    url(r^boy_to_girl/, views.boy_to_girl),
]

 

views.py

from django.shortcuts import render
from django.shortcuts import HttpResponse
from app01 import models
from django import forms


def add_user_type(request):
    q = request.GET.get(q, None)
    if q:
        models.UserType.objects.create(caption=q)
    return HttpResponse(q)

def add_boy(request):
    boy = request.GET.get(v,None)
    if boy:
        models.Boy.objects.create(username=boy)
    return HttpResponse(boy)

def add_girl(request):
    girl = request.GET.get(v,None)
    if girl:
        models.Girl.objects.create(name=girl)
    return HttpResponse(girl)

def boy_to_girl(request):
    g1 = models.Girl.objects.get(id=1)
    print("",g1.name)
    return HttpResponse("ok")

不用创建html文件,

直接浏览器输入add_boy/?v=李四和add_girl/?v=小红  可以对数据库添加 数据

 

 

技术分享

 然后 http://127.0.0.1:8000/boy_to_girl/ 可以取得数据

 

 

 技术分享

 views.py中取出

def boy_to_girl(request):
    g1 = models.Girl.objects.get(id=1)
    print("",g1.name)
    return HttpResponse("ok")

 

 

输出 效果

 技术分享

 

 

veiws.py中实现关联第三张表

def boy_to_girl(request):
    g1 = models.Girl.objects.get(id=1)
   # 利用对对多字段b将男孩和女孩建立关系
  #第三张表
g1.b.add(models.Boy.objects.get(id=1)) g1.b.add(1) return HttpResponse("ok")

 

获取关联数据

veiws.py

def boy_to_girl(request):
   #  g1 = models.Girl.objects.get(id=1)
   # # 利用对对多字段b将男孩和女孩建立关系
   #  g1.b.add(models.Boy.objects.get(id=1))
   #  g1.b.add(1)
   #  print("女",g1.name)
  #第三张表,查询数据
g1 = models.Girl.objects.get(id=1) ret = g1.b.all() print(ret) return HttpResponse("ok")

 

 

技术分享

 

 再添加 关联,一个女对id 2的男

views.py

def boy_to_girl(request):
    g1 = models.Girl.objects.get(id=1)
   # 利用对对多字段b将男孩和女孩建立关系
    g1.b.add(models.Boy.objects.get(id=2))
    g1.b.add(1)
    # print("女",g1.name)
  #第三张表 查询数据
g1 = models.Girl.objects.get(id=1) ret = g1.b.all() print(ret) return HttpResponse("ok")

 

输出 结果 

技术分享

 

Python 【第十四章】django 数据操作之model 之多对多操作

原文:http://www.cnblogs.com/yaabb163/p/6357313.html

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