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