Имя поля модели Django "check" вызывает SystemCheckError - PullRequest
0 голосов
/ 14 февраля 2019

В состоянии Django docs существуют только два ограничения на имена полей модели

  • Имя поля не может быть зарезервированным словом Python
  • Имя поля не можетсодержать более одного подчеркивания в строке

Однако, учитывая следующий пример, не похоже, что я могу использовать имя поля check в качестве ForeignKey.

class Check(models.Model):

    name = models.CharField(max_length=100)

class MyModel(models.Model):

    # this works fine
    #check = models.BooleanField()

    # this breaks
    check = models.ForeignKey(Check, on_delete=models.PROTECT, related_name='+')

Вот ошибка:

$ python manage.py check
SystemCheckError: System check identified some issues:

ERRORS:
myapp.MyModel: (models.E020) The 'MyModel.check()' class method is currently overridden by <django.db.models.fields.related_descriptors.ForwardManyToOneDescriptor object at 0x03A818D0>

Документы не правы, или я что-то не так делаю?

Редактировать: забыл упомянуть, что этот проект использует Python 2и Джанго 1,11

1 Ответ

0 голосов
/ 14 февраля 2019

Я нашел систему проверки системы в django docs (https://docs.djangoproject.com/en/2.2/ref/checks/#system-check-framework)

Ваше поле проверки, вызванное во время системных проверок django, вызвало так SystemCheckError.

Это произошло в Basecommand () в djangohttps://github.com/django/django/blob/1e87c9fe71703fab23039aa63fafe4f6aac98bbc/django/core/management/base.py#L148)

1. ``django-admin`` or ``manage.py`` loads the command class
   and calls its ``run_from_argv()`` method.
2. The ``run_from_argv()`` method calls ``create_parser()`` to get
   an ``ArgumentParser`` for the arguments, parses them, performs
   any environment changes requested by options like
   ``pythonpath``, and then calls the ``execute()`` method,
   passing the parsed arguments.
3. The ``execute()`` method attempts to carry out the command by
   calling the ``handle()`` method with the parsed arguments; any
   output produced by ``handle()`` will be printed to standard
   output and, if the command is intended to produce a block of
   SQL statements, will be wrapped in ``BEGIN`` and ``COMMIT``.
4. If ``handle()`` or ``execute()`` raised any exception (e.g.
   ``CommandError``), ``run_from_argv()`` will  instead print an error
   message to ``stderr``.
...