Ошибка при попытке переименовать имя поля в моем models.py - PullRequest
1 голос
/ 19 января 2020

Досадная проблема. Я хочу переименовать поле в моей модели из reconciled_type в import_type. Как только я изменяю имя поля, я получаю сообщение об ошибке ниже и не могу перейти к MakeMigrations.

raise FieldError("Cannot resolve keyword '%s' into field. "
django.core.exceptions.FieldError: Cannot resolve keyword 'reconciled_type' into field. Choices are: account, amount, category, category_id, created, currency, data, description, id, import_journal_entry, import_journal_entry_id, import_type, is_load, merchant, merchant_id, monzo_id, settled, transaction_datetime, updated

Поле в Models.py:

    IMPORT_TYPE_CHOICES = (
        ('r', 'Reconciled'),
        ('i', 'Ignore'),
    )
    reconciled_type = models.CharField(
        max_length=1,
        choices=IMPORT_TYPE_CHOICES,
        blank=True, null=True,
        )

Полный возврат:

Performing system checks...

Exception in thread django-main-thread:
Traceback (most recent call last):
  File "C:\Users\Philip\AppData\Local\Programs\Python\Python38-32\lib\threading.py", line 932, in _bootstrap_inner
    self.run()
  File "C:\Users\Philip\AppData\Local\Programs\Python\Python38-32\lib\threading.py", line 870, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Users\Philip\CodeRepos\Acacia2\venv\lib\site-packages\django\utils\autoreload.py", line 53, in wrapper
    fn(*args, **kwargs)
  File "C:\Users\Philip\CodeRepos\Acacia2\venv\lib\site-packages\django\core\management\commands\runserver.py", line 117, in inner_run
    self.check(display_num_errors=True)
  File "C:\Users\Philip\CodeRepos\Acacia2\venv\lib\site-packages\django\core\management\base.py", line 392, in check
    all_issues = self._run_checks(
  File "C:\Users\Philip\CodeRepos\Acacia2\venv\lib\site-packages\django\core\management\base.py", line 382, in _run_checks
    return checks.run_checks(**kwargs)
  File "C:\Users\Philip\CodeRepos\Acacia2\venv\lib\site-packages\django\core\checks\registry.py", line 72, in run_checks
    new_errors = check(app_configs=app_configs)
  File "C:\Users\Philip\CodeRepos\Acacia2\venv\lib\site-packages\django\core\checks\urls.py", line 13, in check_url_config
    return check_resolver(resolver)
  File "C:\Users\Philip\CodeRepos\Acacia2\venv\lib\site-packages\django\core\checks\urls.py", line 23, in check_resolver
    return check_method()
  File "C:\Users\Philip\CodeRepos\Acacia2\venv\lib\site-packages\django\urls\resolvers.py", 
line 406, in check
    for pattern in self.url_patterns:
  File "C:\Users\Philip\CodeRepos\Acacia2\venv\lib\site-packages\django\utils\functional.py", line 48, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "C:\Users\Philip\CodeRepos\Acacia2\venv\lib\site-packages\django\urls\resolvers.py", 
line 587, in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
  File "C:\Users\Philip\CodeRepos\Acacia2\venv\lib\site-packages\django\utils\functional.py", line 48, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "C:\Users\Philip\CodeRepos\Acacia2\venv\lib\site-packages\django\urls\resolvers.py", 
line 580, in urlconf_module
    return import_module(self.urlconf_name)
  File "C:\Users\Philip\AppData\Local\Programs\Python\Python38-32\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 783, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "C:\Users\Philip\CodeRepos\Acacia2\acacia2\urls.py", line 6, in <module>
    import monzo.views
  File "C:\Users\Philip\CodeRepos\Acacia2\monzo\views.py", line 11, in <module>
    from .forms import ReconciliationForm
  File "C:\Users\Philip\CodeRepos\Acacia2\monzo\forms.py", line 8, in <module>
    class ReconciliationForm(forms.Form):
  File "C:\Users\Philip\CodeRepos\Acacia2\monzo\forms.py", line 9, in ReconciliationForm    
    transaction = forms.ModelChoiceField(queryset=Transaction.objects.filter(reconciled_type__isnull=True),required=True)
  File "C:\Users\Philip\CodeRepos\Acacia2\venv\lib\site-packages\django\db\models\manager.py", line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "C:\Users\Philip\CodeRepos\Acacia2\venv\lib\site-packages\django\db\models\query.py", line 904, in filter
    return self._filter_or_exclude(False, *args, **kwargs)
  File "C:\Users\Philip\CodeRepos\Acacia2\venv\lib\site-packages\django\db\models\query.py", line 923, in _filter_or_exclude
    clone.query.add_q(Q(*args, **kwargs))
  File "C:\Users\Philip\CodeRepos\Acacia2\venv\lib\site-packages\django\db\models\sql\query.py", line 1337, in add_q
    clause, _ = self._add_q(q_object, self.used_aliases)
  File "C:\Users\Philip\CodeRepos\Acacia2\venv\lib\site-packages\django\db\models\sql\query.py", line 1362, in _add_q
    child_clause, needed_inner = self.build_filter(
  File "C:\Users\Philip\CodeRepos\Acacia2\venv\lib\site-packages\django\db\models\sql\query.py", line 1239, in build_filter
    lookups, parts, reffed_expression = self.solve_lookup_type(arg)
  File "C:\Users\Philip\CodeRepos\Acacia2\venv\lib\site-packages\django\db\models\sql\query.py", line 1077, in solve_lookup_type
    _, field, _, lookup_parts = self.names_to_path(lookup_splitted, self.get_meta())        
  File "C:\Users\Philip\CodeRepos\Acacia2\venv\lib\site-packages\django\db\models\sql\query.py", line 1466, in names_to_path
    raise FieldError("Cannot resolve keyword '%s' into field. "
django.core.exceptions.FieldError: Cannot resolve keyword 'reconciled_type' into field. Choices are: account, amount, category, category_id, created, currency, data, description, id, import_journal_entry, import_journal_entry_id, import_type, is_load, merchant, merchant_id, monzo_id, settled, transaction_datetime, updated

Ответы [ 2 ]

1 голос
/ 19 января 2020

В вашем ReconciliationForm вы написали строку вроде:

class ReconciliationForm(forms.ModelForm):
    transaction = forms.ModelChoiceField(
       queryset=Transaction.objects.filter(<b>reconciled_type__isnull=True</b>),
       required=True
    )
    # &hellip;

, но, поскольку вы переименовали это поле, построение набора запросов, таким образом, вызовет ошибку, вам также необходимо изменить запрос:

class ReconciliationForm(forms.ModelForm):
    transaction = forms.ModelChoiceField(
        queryset=Transaction.objects.filter(<b>import_type=None</b>),
        required=True
    )
    # &hellip;

Возможно, вам придется изменить несколько наборов запросов, которые зависели от этого поля.

0 голосов
/ 19 января 2020

Причиной этой ошибки может быть то, что django не может разрешить ваш выбор. Варианты должны быть списком

    IMPORT_TYPE_CHOICES = [ # converted to list from tuple
        ('r', 'Reconciled'),
        ('i', 'Ignore'),
    ]
...