Имя поля модели Django «check» вызывает SystemCheckError

2

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

  • Имя поля не может быть зарезервированным словом 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 и Django 1.11

  • 1
    Это интересно. В базовом объекте Model django есть метод класса check (), но я попробовал другой метод класса, например from_db и он работает! Wierd
Теги:
django-models

1 ответ

0

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

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

Это произошло в Basecommand django (https://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''.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню