Модель с отметкой времени __init__() получила несколько значений для аргумента 'on_delete'

Я пытаюсь создать отношение внешнего ключа в моделях DRF с on_delete

fk_city = models.ForeignKey("region_mgmt.City", "warehouses", on_delete=models.SET_NULL)    
TypeError: __init__() got multiple values for argument 'on_delete'

ниже мой код:

from django_extensions.db.models import TimeStampedModel

class State(TimeStampedModel, models.Model):
    id = models.UUIDField(default=uuid.uuid4, primary_key=True)
    name = models.CharField(max_length=100)
    postal_code = models.CharField(max_length=20, blank=True, null=True)
    fk_country = models.ForeignKey(Country, related_name="states", on_delete=models.CASCADE)

    def __str__(self):
        return self.name
class City(TimeStampedModel, models.Model):
    id = models.UUIDField(default=uuid.uuid4, primary_key=True)
    name = models.CharField(max_length=100)
    postal_code = models.CharField(max_length=20, blank=True, null=True)
    fk_state = models.ForeignKey(State, related_name="cities", on_delete=models.CASCADE)

    def __str__(self):
        return self.name

а в другом модуле у меня следующая модель

class Warehouse(TimeStampedModel, models.Model):
    id = models.UUIDField(default=uuid.uuid4, primary_key=True)
    name = models.CharField(max_length=255, null=False, blank=False)
    address = models.TextField(null=False, blank=False)
    fk_city = models.ForeignKey("region_mgmt.City", "warehouses", on_delete=models.SET_NULL)
    contact_no = models.CharField(max_length=100)

кто-нибудь знает причину и ее решение?

Вы не поделились кодом с fk_city...

Willem Van Onsem 22.04.2022 23:42

Но вы должны использовать related_name='warehouses'.

Willem Van Onsem 22.04.2022 23:42

Спасибо, что указали на @WillemVanOnsem, я добавил недостающий код, не могли бы вы взглянуть

nick 22.04.2022 23:45

Вторым позиционным аргументом конструктора ForeignKeyдолжен будет параметр on_delete — вы указали второй позиционный аргумент, а также аргумент ключевого слова on_delete. Вам нужно удалить один. Похоже, вы хотите, чтобы warehouses было связанным именем, и в этом случае вам нужно явно объявить его как таковое, используя аргумент ключевого слова.

solarissmoke 23.04.2022 06:23

Спасибо. Да, я пропустил ключевое слово related_name.

nick 10.05.2022 10:10
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
2
5
27
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Второй параметр ForeignKey — это Параметр on_delete=… [Django-doc], поэтому вы указываете для него два значения. Вероятно, вы хотите использовать свой warehouses как Параметр related_name=… [Django-doc], поэтому вы реализуете это как:

class Warehouse(TimeStampedModel, models.Model):
    # …
    fk_city = models.ForeignKey(
        'region_mgmt.City',
        related_name='warehouses',
        on_delete=models.SET_NULL,
        null=True
    )

Другие вопросы по теме