反向找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框 ...
随机推荐
- MacOS下安装小米SQL优化工具soar
1 下载源码包 赋予权限 wget https://github.com/XiaoMi/soar/releases/download/0.11.0/soar.darwin-amd64 -O soar ...
- 快速安装nginx
1.创建nignx用户 /usr/sbin/groupadd -f nginx /usr/sbin/useradd -g nginx nginx 2.安装依赖 yum install gcc gcc- ...
- ionic编译安卓App
安装node.js 安装Android Studio 运行Android Studio安装SDK,在D:\AndroidSDK 配置SDK环境 ANDROID_HOME=D:\AndroidSDK P ...
- 2017 ACM/ICPC(西安)赛后总结
早上8:00的高铁,所以不得不6点前起床,向火车站赶……到达西安后已经是中午,西工大距离西安北站大概3小时车程的距离,只好先解决午饭再赶路了……下午3.30的热身赛,一行人在3.35左右赶到了赛场,坐 ...
- php编程 之 php基础一
1,语法 PHP 脚本在服务器上执行,然后将纯 HTML 结果发送回浏览器.PHP 文件通常包含 HTML 标签和一些 PHP 脚本代码 比如下面这个:这是一个简单的 PHP 文件实例,它可以向浏览器 ...
- scrapy基础 之 静态网页实例
1,scrapy爬虫基本流程: 1. 创建一个新的Scrapy Project > scrapy startproject 项目名称 #系统会在当前目录下创建一个项目名称命名的文件夹,其下 ...
- 20165234 《Java程序设计》第四周学习总结
第四周学习总结 教材学习内容总结 第5章 子类与继承 子类的继承性 子类和父类在同一包中的继承性:子类继承父类中不是 private 的成员变量和方法作为自己的成员变量和方法 子类和父类不在同一包中的 ...
- Sql server—— for xml path简单用法(可以按照分组把相同组的列中的不同的值,像字符串一样拼接在一起显示在分组之后的列中。)
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAI8AAACWCAIAAABo2EyXAAAKeklEQVR4nO2dy27rNh7G+U7CFIrfZX
- ROC和AUC理解
一. ROC曲线概念 二分类问题在机器学习中是一个很常见的问题,经常会用到.ROC (Receiver Operating Characteristic) 曲线和 AUC (Area Under th ...
- web应用与http协议
web应用 Web应用程序是一种可以通过web访问的应用程序,程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件. 应用程序有两种模式C/S.B/S.C/S是客户端/ ...