当前位置: 首页 > 编程笔记 >

对django2.0 关联表的必填on_delete参数的含义解析

仲学真
2023-03-14
本文向大家介绍对django2.0 关联表的必填on_delete参数的含义解析,包括了对django2.0 关联表的必填on_delete参数的含义解析的使用技巧和注意事项,需要的朋友参考一下

一对多(ForeignKey)

class ForeignKey(ForeignObject):
  def __init__(self, to, on_delete, related_name=None, related_query_name=None,
         limit_choices_to=None, parent_link=False, to_field=None,
         db_constraint=True, **kwargs):
    super().__init__(to, on_delete, from_fields=['self'], to_fields=[to_field], **kwargs)

一对一(OneToOneField)

class OneToOneField(ForeignKey):
  def __init__(self, to, on_delete, to_field=None, **kwargs):
    kwargs['unique'] = True
    super().__init__(to, on_delete, to_field=to_field, **kwargs)

从上面外键(ForeignKey)和一对一(OneToOneField)的参数中可以看出,都有on_delete参数,而 django 升级到2.0之后,表与表之间关联的时候,必须要写on_delete参数,否则会报异常:

TypeError: __init__() missing 1 required positional argument: 'on_delete'

因此,整理一下on_delete参数的各个值的含义:

on_delete=None,        # 删除关联表中的数据时,当前表与其关联的field的行为
on_delete=models.CASCADE,   # 删除关联数据,与之关联也删除
on_delete=models.DO_NOTHING, # 删除关联数据,什么也不做
on_delete=models.PROTECT,   # 删除关联数据,引发错误ProtectedError
# models.ForeignKey('关联表', on_delete=models.SET_NULL, blank=True, null=True)
on_delete=models.SET_NULL,  # 删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空,一对一同理)
# models.ForeignKey('关联表', on_delete=models.SET_DEFAULT, default='默认值')
on_delete=models.SET_DEFAULT, # 删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值,一对一同理)
on_delete=models.SET,     # 删除关联数据,
 a. 与之关联的值设置为指定值,设置:models.SET(值)
 b. 与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象)

多对多(ManyToManyField)

class ManyToManyField(RelatedField):
  def __init__(self, to, related_name=None, related_query_name=None,
         limit_choices_to=None, symmetrical=None, through=None,
         through_fields=None, db_constraint=True, db_table=None,
         swappable=True, **kwargs):
    super().__init__(**kwargs)

因为多对多(ManyToManyField)没有 on_delete 参数,所以略过不提.

以上这篇对django2.0 关联表的必填on_delete参数的含义解析就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。

 类似资料:
  • 我试图实现下面的python代码,但出现了以下错误。有人能帮我吗? 我得到的错误: 文件“C:\Users\Lenovo\Anaconda2\envs\example\u env\lib\site packages\keras\layers\convolutional.py”,第388行,在init super(Convolution2D,self)中。初始(**kwargs) 文件“C:\Use

  • 问题内容: 我目前正在阅读基于Tensorflow的苗条库的源代码,并且它们将参数用于很多方法,例如here。 从API页面,我可以看到: 该上下文管理器验证(可选)值是否来自同一图,确保该图是默认图,并推送名称范围和变量范围。 我的问题是:仅检查来自的变量是否来自同一张图?有哪些用例?为什么有人需要它? 问题答案: variable_scope参数有助于确保变量的唯一性并在需要时重用变量。 是的

  • 我正在学习Spring Framework,我得到了以下错误消息: com.example.demo.AppUser.AppUserService中的构造函数的参数0需要类型为“com.example.demo.AppUser.AppUserRepository”的bean,但找不到该bean。 这是我的AppUserRepository 如果有人知道问题出在哪里,请帮帮我

  • 我试图弄清楚如何让Swagger解析一个带有未定义数量的值的关联数组。 我有类似的案例,不同的是这些其他案例是完全规则的(我事先知道所有属性的名称)。然而,在这种情况下,我可能不知道(实际上我不想知道)哪些可能是值的名称。 JSON的一个例子,它有一个带有未定义数量的语言代码的关联数组。每个语言代码键都有一组未定义的翻译,每个翻译都有一个键和值。在这种情况下,“描述”和“步行访问”是翻译的关键。但

  • 我想知道这个表达式是否正确,是否意味着:我在字段状态上加了一个写锁,然后更改它。如果不是,我想知道参数的含义是什么,因为我总是看到这个。

  • 我需要用Kafka做一些性能测试。 record_size:100 server_address:bootstrap.servers=localhost:9092 buffer.memory=67108864 但我并不否认: 谢谢