反向找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框 ...
随机推荐
- actionsheet(操作表)
推荐使用锚点方式显示.隐藏actionsheet: 若要使用js代码动态显示.隐藏actionsheet,同样在popover插件的构造方法中传入"toggle"参数即可 //传入 ...
- 修改element表格组件的样式
最近在开发一个项目,使用到了element中的表格组件,但是该组件的样式不是我们想要的样式,需要自己再调整,但是常常会遇到自己设置的样式无效,我使用的技术是Vue开发的 1. 页面使用了三栏布局,最右 ...
- Windows IIS 使用批处理脚本自动安装与卸载
IIS6:适用于win server 2003 :: ******************* :: * 安装 :: ******************* :Install Cls @echo. &a ...
- Leetcode#709. To Lower Case(转换成小写字母)
题目描述 实现函数 ToLowerCase(),该函数接收一个字符串参数 str,并将该字符串中的大写字母转换成小写字母,之后返回新的字符串. 示例 1: 输入: "Hello" ...
- javascript面试--网络收集
史上最全的Javascript面试题总结(内附答案) - CSDN博客http://blog.csdn.net/u011277123/article/details/70208768 6.什么是未声明 ...
- RabbitMQ安装(一)
RabbitMQ官网 http://www.rabbitmq.com 下载地址 http://www.rabbitmq.com/download.html 一 Windows下安装RabbitMq 1 ...
- Battery historian安装及使用
在介绍Battery historian之前首先来介绍一下 Android adb bugreport 工具,bugreport是什么,怎么用? android系统想要成为一个功能完备,生态繁荣的操作 ...
- PF部分代码解读
// 单个粒子数据结构 typedef struct { // 粒子状态 pf_vector_t pose; // 粒子权重 double weight; } pf_sample_t; // Info ...
- LwIP Application Developers Manual4---传输层之UDP、TCP
1.前言 本文主要讲解传输层协议UDP TCP 2.UDP 2.1 UDP from an application perspective 2.2 UDP support history in lwI ...
- hibernate框架学习之数据抓取(加载)策略helloworld
package cn.itcast.h3.query.hql; import java.util.List; import org.hibernate.Query; import org.hibern ...