反向找related_name以及limit_fields_to
问题2:客户的添加页面,通过popup创建用户时
解决方案:
如果新创建的用户时:如果是销售部的人,页面才增加
目的是:拿到limit_choices_to,就可以判断了
当有两个Foreignkey的时候,都关联同一张表,反向生成的时候
不知道去找那个字段了,得加上releated_name
1、创建表
from django.db import models # Create your models here.
class UserInfo(models.Model):
user_type_choices = (
(1,"班主任"),
(2,"讲师")
)
user_type_id = models.IntegerField(choices=user_type_choices)
name = models.CharField(max_length=32,verbose_name="姓名")
pwd = models.CharField(max_length=32,verbose_name="密码") class ClassList(models.Model):
teacher = models.ForeignKey(to="UserInfo",to_field="id",limit_choices_to={"user_type_id":1},related_name="toclasslist") ## user_obj.tclasslist.all()
classteacher = models.ForeignKey(to="UserInfo",to_field="id",limit_choices_to={"user_type_id":2}) #没有related_name默认是None #user_obj.classlist_set.all() class Test(models.Model):
title = models.CharField(max_length=32)
teacher = models.ForeignKey(to="UserInfo",to_field="id",limit_choices_to={"user_type_id":3}) #注意limit_choices_to的key必须要和上面的对应上
2、urls
from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^test/',views.test),
url(r'^index/',views.index),
url(r'^condition/',views.condition),
]
3、views
from django.db.models import Q
from django.shortcuts import render,HttpResponse
from django.forms import ModelForm
from app01 import models
# Create your views here.
class UserInfoForm(ModelForm):
class Meta:
model = models.UserInfo
fields = "__all__" class ClassListForm(ModelForm):
class Meta:
model = models.ClassList
fields = "__all__" def condition(request):
'''测试Q查询''' key_word = request.GET.get("q")
# print(key_word)
search_fileds = ['name', 'email'] # 拿到搜索字段
condition = Q()
condition.connector = "or"
if key_word and True:
for fields_name in search_fileds:
condition.children.append((fields_name, key_word))
print(condition)
return HttpResponse("ok") def test(request):
mn = request.GET.get("model_name")
rn = request.GET.get("related_name")
from django.db.models.fields.reverse_related import ManyToOneRel
# 1、创建用户(自己创建的用户和利用ModelForm,form.save()创建的一样))
# form = UserInfoForm(request.POST)
# obj = form.save()
obj = models.UserInfo.objects.create(user_type_id=1,name="hiana",pwd=123456)
# 2、判断用户的类型是否可以放置到班主任的下拉框
#获取obj对象可反向关联的所有的字段
#关联字段所在类的名称等
# print(obj._meta.related_objects) #(<ManyToOneRel: app01.classlist>, <ManyToOneRel: app01.classlist>, <ManyToOneRel: app01.test>)
for related_object in obj._meta.related_objects:
# print(related_object.related_name) #打印的是反向查询的related_name,结果是:toclasslist,None,None
# print(related_object.field,"1") #app01.ClassList.teacher 关联的那个字段的名字
# print(related_object.field.model,"2") #<class 'app01.models.ClassList'> 关联的字段所在的类
# print(related_object.field.model._meta.model_name,"3") #classlist 关联字段所在的类名
model_name = related_object.field.model._meta.model_name
related_name =related_object.related_name
if type(related_object) ==ManyToOneRel:
to_field_value = related_object.field_name #那到的是反向查询关联字段(to_fields)的值 id
limit_choices_to = related_object.limit_choices_to #拿到的是limit_choices_to的值{'user_type_id': 2}
if model_name==mn and str(related_name)==rn:
print(to_field_value,limit_choices_to)
models.UserInfo.objects.filter(**limit_choices_to,pk=obj.pk)
# models.UserInfo.objects.filter(**{"user_type_id":2},pk=obj.pk) return HttpResponse("ok") def index(request):
form = ClassListForm()
return render(request,"index.html",{"form":form})
4、templates
index.html
<body>
{{ form.as_p }}
</body>
反向找related_name以及limit_fields_to的更多相关文章
- string反向找位置,分割字符串(只取文件夹路径)
1 #include <uf.h> 2 #include <uf_part.h> 3 #include <atlstr.h> 4 #include <iost ...
- Python知识目录
目录 一.计算机基础 二.Python基础 三.函数 四.常用模块 五.模块和包 六.面向对象 七.网络编程socket 八.数据库 九.前端 十.Python Web框架 十一.版本控制--GIT ...
- django之表多对多建立方式、form组件、钩子函数 08
目录 多对多三种创建方式 1.全自动(用ManyToManyField创建第三张表) 2.纯手写 3.半自动 form组件 引入 form组件的使用 forms组件渲染标签 form表单展示信息 fo ...
- ORM之自关联、add、set方法、聚合函数、F、Q查询和事务
一.外键自关联(一对多) 1.建表 # 评论表 class Comment(models.Model): id = models.AutoField(primary_key=True) content ...
- ORM之基础操作进阶
一.外键自关联(一对多) 1.建表 # 评论表 class Comment(models.Model): id = models.AutoField(primary_key=True) content ...
- ORM应用
目录 ORM概念 ORM由来 ORM的优势 ORM的劣势 ORM总结 ORM 与 DB 的对应关系图 Model 模块 ORM操作 增删改查操作 ORM概念 对象关系映射(Object Relatio ...
- django模型中有外键关系的表删除相关设置
0904自我总结 django模型中有外键关系的表删除相关设置 一.一对一 例如有Author.AuthorDetail两表 author = models.OneToOneField(to='Aut ...
- 相关query挖掘
1.何为相关query 我通常也把相关query称为相似query,搜索日志中一个用户在短时间内的一系列搜索词被称为相关query.相关就是两个query间有一定的关系,反映了用户在当时的需求.本文就 ...
- Python之路【第二十一篇】Django ORM详解
ORM回顾 关系对象映射(Object Relational Mapping,简称ORM). django中遵循 Code Frist 的原则,即:根据代码中定义的类来自动生成数据库表. 对于ORM框 ...
随机推荐
- 让table中td的内容靠上对齐
valign=“top”; <td valign="top"></td> 点此查看详细table的td的valign属性
- JSON格式说明
JSON的优点 相比XML拥有更简单的格式. 不同WEB浏览器处理的结果一样. 纯文本数据交换格式. JSON格式特点 {} 对象定义域 key:value 定义属性 key 字符串格式,value ...
- F - Change FZU - 2277 (DFS序+线段树)
题目链接: F - Change FZU - 2277 题目大意: 题意: 给定一棵根为1, n个结点的树. 有q个操作,有两种不同的操作 (1) 1 v k x : a[v] += x, a[v ' ...
- Tomcat/7.0.81 远程代码执行漏洞复现
Tomcat/7.0.81 远程代码执行漏洞复现 参考链接: http://www.freebuf.com/vuls/150203.html 漏洞描述: CVE-2017-12617 Apache T ...
- Django学习手册 - ORM 多对多表
定义表结构: class Host(models.Model): hostname = models.CharField(max_length=32) port = models.IntegerFie ...
- ASP.NET MVC - XML节点查找
Jquery操作Xml Jquery1.2开始不再支持XPath表达式. <?xml version="1.0" encoding="utf-8" ?&g ...
- Javascript - Jquery - 动画
动画(Dynamic) JQuery动画必须是在标准文档下使用 否则可能引起动画时抖动或其它不可预知的结果,标准文档格式: <!DOCTYPE html PUBLIC "-//W3 ...
- Light oj 1281 - New Traffic System 多状态最短路
题目大意:有向图,新计划的地铁,有k个计划新路,利用现有的铁路.k条新路和限定只能用d条新路,找出从0到n-1的最短路径 题目思路:用dist[u][use],储存使用use条新路,到达节点u的最短路 ...
- 用Tesseract训练验证码遇到的问题
1.准备验证码图片 import os from urllib.request import urlretrieve urlPath='http://www.189.cn/portal/captcha ...
- xadmin后台页面定制和添加服务器监控组件
xadmin定制 项目需要添加服务器监控页面,碍于xadmin不是很好自定义页面,之前写过插件,太麻烦了,还是直接改源码 原理其实很简单,因为xadmin的处理流程和django类似,都是通过拦截UR ...