郑东新区建设局网站,51网站怎么打开,网站icp备案查询官网,wordpress 组织架构使用自关联方法处理多表关系
这里通过省市区之间的关系来解释自关联的情况
在设置地址的过程中 , 不可避免的需要设置 , 省份 ,市以及区
而省市区三者之间的具有一定的关联关系
一个省份对应多个市
一个市对应多个区
如果通过设置主表从表关系则需要设置三张标分别对应省…使用自关联方法处理多表关系
这里通过省市区之间的关系来解释自关联的情况
在设置地址的过程中 , 不可避免的需要设置 , 省份 ,市以及区
而省市区三者之间的具有一定的关联关系
一个省份对应多个市
一个市对应多个区
如果通过设置主表从表关系则需要设置三张标分别对应省市区 , 这对数据处查询造成了很大的压力
所以我们在这里使用自关联的方法使用一张表来解决上述问题
# 自关联
# id name -id
# 1 广东省 null
# 2 湖北省
# 3 广州市 1
# 4 天河区 3如上述 , 广州市为广东省的一个市 , 则可以为其设置一个外键 , 外键的值与广东省即主键相同
同理天河区为广州市的一个区 , 我们也可以按上述方法进行设置
这样我们在调用查询的过程中就可以通过从键获得省市区之间的对应关系
在Django中的ORM数据库框架如何设置自关联
class Area(models.Model):name models.CharField(max_length20)# 自关联 self# SET_NULL: 删除被关联的数据 对应链接的数据字段值会设置为 NULLparent models.ForeignKey(self , on_deletemodels.SET_NULL , nullTrue,blankTrue,related_namesubs)class Meta:db_table areas在Django的模型models定义中ForeignKey 是一个用于表示两个模型之间一对多关系的字段。在你给出的代码片段中ForeignKey 被用于一个模型自身即所谓的“自引用”或“递归”关系。让我们逐一分析该字段的各个参数
python复制代码parent models.ForeignKey(self, on_deletemodels.SET_NULL, nullTrue, blankTrue, related_namesubs)‘self’ 这表示ForeignKey指向的是同一个模型即该模型自身。在数据库中这意味着该表会有一个外键字段该字段引用该表的另一个记录。 on_deletemodels.SET_NULL 当被引用的对象即父对象被删除时该字段的值将被设置为NULL。这是Django提供的一种处理外键对象删除时的策略。注意为了使用SET_NULL相应的字段在这个例子中是parent必须允许NULL值这就是为什么nullTrue也被设置的原因。 nullTrue 这表示该字段在数据库中可以为NULL。由于这是一个ForeignKey当没有关联的父对象时这个字段可能会是NULL。 blankTrue 在Django的表单验证中blankTrue表示该字段在表单中可以为空即用户可以不填写该字段。但是对于ForeignKey字段blank通常与表单的验证相关而不是数据库层面的。在数据库层面它是否可以为空是由null参数决定的。但在Django的admin或自定义表单中你可能会想允许用户不填写这个字段这时blankTrue就很有用了。 related_name‘subs’ 这为反向关系提供了一个名字。默认情况下如果你有一个名为MyModel的模型并且它有一个指向自身的ForeignKey那么你可以通过my_model_instance.mymodel_set.all()来获取与该实例相关的所有子对象。但是通过设置related_namesubs你可以通过my_model_instance.subs.all()来获取这些子对象这使得代码更加清晰和易读。
综上所述这个ForeignKey字段定义了一个模型与其自身之间的递归关系允许模型实例有一个父实例或没有并提供了在父实例被删除时如何处理该关系的策略。同时它还为反向关系提供了一个易于理解和使用的名字。