美文网首页
字段正向或反向取值

字段正向或反向取值

作者: lkning | 来源:发表于2017-12-25 20:20 被阅读0次
class UserInfo(models.Model):
    user_type_choices = (
        (1,'讲师'),
        (2,'班主任'),
        (3,'学生'),
    )
    user_type_id = models.IntegerField(choices=user_type_choices)
    user = models.CharField(max_length=32)
    pwd = models.CharField(max_length=64)

class ClassList(models.Model):
    name = models.CharField(max_length=32)
    teacher = models.ForeignKey(to='UserInfo',to_field='id',limit_choices_to={'user_type_id':1},related_name="tclasslist")# user_obj.tclasslist.all()
    headmaster = 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})

class Student(models.Model):
    info = models.OneToOneField(to="UserInfo",to_field="id")
    cls_name=models.ManyToManyField(to="ClassList")

ClassList._meta.get_field("teacher ").model 获取ClassList模型
ClassList._meta.get_field("teacher ") 获取teacher ,不能以ClassList.teacher 的方式获取
->
ClassList._meta.get_field("teacher ").rel.related_name
获取related_name
->
ClassList._meta.get_field("teacher ").rel.to
获取UserInfo
->ClassList._meta.get_field("teacher ").verbose_name获取字段verbose_name

->ClassList._meta.get_field('name') # 根据字段名称,获取字段对象
->ClassList._meta.fields # 获取类中所有的字段
->ClassList._meta._get_fields() # 获取类中所有的字段(包含反向关联的字段)
->Student._meta.many_to_many # 获取正向m2m字段
->Student._meta.many_to_many[0].rel.to #获取ClassList

from django.db.models.fields.reverse_related import ManyToOneRel,ManyToManyRel
    for related_object in UserInfo._meta.related_objects:
        model_name = related_object.field.model._meta.model_name
        related_name = related_object.related_name
        # print(type(related_object))
        print(related_object.field_name)
        print("to------------",related_object.to)
        print("field------------",related_object.field)
        if (type(related_object) == ManyToOneRel):

            field_name = related_object.field_name
            limit_choices_to = related_object.limit_choices_to
            # print(model_name,field_name,related_name,limit_choices_to)
            if model_name == mn and str(related_name) == rn:
                print(field_name,limit_choices_to)
                

UserInfo._meta.related_objects获取所有反向关联字段
related_object.field_name# 获取正向关联字段
related_object.to #获取关联关联model
related_object.field #获取当前下有m2m,fk的model
打印结果

id
to------------ <class 'app01.models.UserInfo'>
field------------ app01.ClassList.teacher
id
to------------ <class 'app01.models.UserInfo'>
field------------ app01.ClassList.headmaster
id
to------------ <class 'app01.models.UserInfo'>
field------------ app01.Test.teacher
id
to------------ <class 'app01.models.UserInfo'>
field------------ app01.Student.info

ModelForm字段也可以反向获取modle

    meta = type('Meta', (object,), {'model': models.ClassList, 'fields': '__all__'})
    TestModelForm = type('TestModelForm', (ModelForm,), {'Meta': meta})
    from django.forms.models import ModelChoiceField
    for item in TestModelForm():
        if isinstance(item.field, ModelChoiceField):
            print(item.field.queryset.model)

打印结果
通过item.field.queryset.model获取对应的字段

<class 'app01.models.UserInfo'>
<class 'app01.models.UserInfo'>

相关文章

  • 字段正向或反向取值

    ClassList._meta.get_field("teacher ").model 获取ClassList模型...

  • Python数据类型_字符串类型

    字符串类型的常用操作 按索引取值(正向取+反向取):只能取 长度len 成员运算 in 和 not in 不是所有...

  • nginx代理

    nginx代理分为正向代理或反向代理。正向代理与反向代理的区别就是代理的对象不一样,正向代理代理的对象是客户端,反...

  • Linux智能DNS服务搭建之Bind服务(二)

    一、DNS正向解析与反向解析 1.DNS正向解析与反向解析简介 2.DNS正向解析与反向解析配置 1)配置正向解析...

  • orm查询操作

    单表查询操作 外键的跨表查询 正向查询(在有外键字段的表向没有的表查询) 反向查询(没有外键的字段向有外键字段的表...

  • Python数据类型_列表类型

    列表类型转换 列表类型的常用操作 按索引存取值(正向存取+反向存取):可取可改 切片 是复制原列表的索引, 不改原...

  • python在不同的表关系下进行表数据的操作

    表关联操作及多表查询 一对多(增删改查) 正向:一个模型中存在外键字段,通过这个模型对外键进行操作就叫正向;反向:...

  • 【Nginx】实现负载均衡的几种方式

    要理解负载均衡,必须先搞清楚正向代理和反向代理。 正向代理与反向代理【总结】 注: 正向代理,代理的是用户。反向代...

  • Nginx常用功能以及相关配置

    Nginx 常用的功能: 1、Http正向代理、反向代理 正向代理和反向代理的区别:1、正向代理:类似我们想要访问...

  • Servlet实现反向代理实践总结

    一、反向代理 反向代理顾名思义,是和正向代理相反,所以我们可以借助于正向代理来理解反向代理。 正向代理:多个客户端...

网友评论

      本文标题:字段正向或反向取值

      本文链接:https://www.haomeiwen.com/subject/axrrgxtx.html