python - 我们可以不使用 on_delete 只定义 models.CASCADE 吗?

标签 python django database django-models

据我所知,当我们在 django 中定义外键时,我们可以像 on_delete=models.CASCADE 那样设置。

最近我看到了像content_type = models.ForeignKey(ContentType,models.CASCADE)这样的代码。

我的问题是 django 是否允许在不使用 on_delete 的情况下定义 models.CASCADE ?或者,如果我们像上面那样定义,它的工作方式会有所不同吗?

content_type = models.ForeignKey(
        ContentType,
        models.CASCADE,
        verbose_name=_('content type'),        
    )

最佳答案

是的,我们可以做到。


要清楚地理解它,请尝试理解以下代码:

def fn(x, y, z=0):
    print('x =', x, 'y =', y, 'z =', z)


fn(1, 2)           # Prints: x = 1 y = 2 z = 0
fn(1, 2, 3)        # Prints: x = 1 y = 2 z = 3
fn(1, y=2)         # Prints: x = 1 y = 2 z = 0
fn(1, y=2, z=3)    # Prints: x = 1 y = 2 z = 3
fn(x=1, y=2)       # Prints: x = 1 y = 2 z = 0
fn(x=1, y=2, z=3)  # Prints: x = 1 y = 2 z = 3
fn(y=2, z=3, x=1)  # Prints: x = 1 y = 2 z = 3

现在,看看 source code of 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,
    ):
        ...

所以,当我们写:

content_type = models.ForeignKey(
    ContentType,
    models.CASCADE,
    verbose_name=_('content type'),        
)

to 参数将为 ContentTypeon_delete 参数将为 models.CASCADE

这与写作完全相同:

content_type = models.ForeignKey(
    on=ContentType,
    on_delete=models.CASCADE,
    verbose_name=_('content type'),        
)

关于python - 我们可以不使用 on_delete 只定义 models.CASCADE 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58393789/

相关文章:

python - 使用 python 的 TCP 端口 - 如何将命令输出转发到 tcp 端口?

python - 我知道我应该将 Python 代码保持在 79 列,但我如何缩进连续的行?

python - pyplot绘制子图的方法

mongodb - 数据库条目的高效唯一 key 生成

java - 来自网络调用的房间数据库中的非重复条目

sql-server - SQL Server 到 MySQL

python - 无法在同一服务器上运行 2 个不同的 Flask 应用程序

python - django.db.utils.OperationalError : (1045:Access denied for user 'root' @'localhost' (using password: NO)

node.js - Django 和 NodeJs - 管理身份验证

django - 如何使用 django-filter 过滤 ManyToMany 字段