据我所知,当我们在 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
参数将为 ContentType
,on_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/