Да, мы можем это сделать.
Чтобы понять это, постарайтесь понять следующий код:
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
Сейчас, посмотрите на исходный код 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'),
)