возникли ошибки при добавлении внешнего ключа в models.py - PullRequest
0 голосов
/ 20 мая 2019

Я хотел перенести некоторые модели, но те, у которых есть функции foreignkey, вызывают некоторые проблемы.

Я запустил следующий код, и он вызвал ошибку

python manage.py migrate

и внешний ключкажется проблема

class Webpage(models.Model):   
    topic =models.ForeignKey(Topic)
    name = models.CharField(max_length=264 , unique=True)
    url = models.URLField(unique=True)

    def __str__(self):
       return self.name
Traceback (most recent call last):
 File "C:\Users\helin\Anaconda3\envs\myenv\lib\sitepackages\django\utils\autoreload.py", line 225, in wrapper fn(*args, **kwargs)
 File "C:\Users\helin\Anaconda3\envs\myenv\lib\site-packages\django\core\management\commands\runserver.py", line 109, in inner_run
        autoreload.raise_last_exception()
 File "C:\Users\helin\Anaconda3\envs\myenv\lib\site-packages\django\utils\autoreload.py", line 248, in raise_last_exception
        raise _exception[1]
 File "C:\Users\helin\Anaconda3\envs\myenv\lib\site-packages\django\core\management\__init__.py", line 337, in execute autoreload.check_errors(django.setup)()
 File "C:\Users\helin\Anaconda3\envs\myenv\lib\sitepackages\django\utils\autoreload.py", line 225, in wrapper fn(*args, **kwargs)
 File "C:\Users\helin\Anaconda3\envs\myenv\lib\site-packages\django\__init__.py", line 24, in setup
        apps.populate(settings.INSTALLED_APPS)
 File "C:\Users\helin\Anaconda3\envs\myenv\lib\site-packages\django\apps\registry.py", line 112, in populate
        app_config.import_models()
 File "C:\Users\helin\Anaconda3\envs\myenv\lib\site-packages\django\apps\config.py", line 198, in import_models
        self.models_module = import_module(models_module_name)
 File "C:\Users\helin\Anaconda3\envs\myenv\lib\importlib\__init__.py", line 126, in import_module
        return _bootstrap._gcd_import(name[level:], package, level)
 File "<frozen importlib._bootstrap>", line 985, in _gcd_import
 File "<frozen importlib._bootstrap>", line 968, in _find_and_load
 File "<frozen importlib._bootstrap>", line 957, in _find_and_load_unlocked
 File "<frozen importlib._bootstrap>", line 673, in _load_unlocked
 File "<frozen importlib._bootstrap_external>", line 697, in exec_module
 File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
 File "C:\Users\helin\Downloads\my_django\first_project\first_app\models.py", line 12, in <module>
        class Webpage(models.Model):
 File "C:\Users\helin\Downloads\my_django\first_project\first_app\models.py", line 13, in Webpage
        topic =models.ForeignKey(Topic)
 TypeError: __init__() missing 1 required positional argument: 'on_delete'

1 Ответ

0 голосов
/ 20 мая 2019

Да, вам не хватает 1 обязательного позиционного аргумента: 'on_delete'.

При использовании внешнего ключа вам необходимо передать ему аргумент on_delete.Это гарантирует, что всякий раз, когда таблица / запись, для которой этот внешний ключ является первичным ключом, будет удалена, она автоматически удалит / защитит запись таблицы, в которой она действует как внешний ключ.

Пример:

class Customer(models.Model):
    customer_id = <something>
class Account(models.Model):
    customer_id = models.ForeignKey(Customer, on_delete=models.CASCADE)

Таким образом, когда клиент с customer_id = x удаляется в таблице, связанной с клиентом, он удаляет соответствующую запись в таблице счетов.

Вы можете прочитать об этом здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...