当我尝试在 models.py 中重命名字段名时出错
Error when I try to rename fieldname in my models.py
烦人的问题。我想将模型中的字段从 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
在你的 ReconciliationForm
中你写了这样一行:
class ReconciliationForm(forms.ModelForm):
transaction = forms.ModelChoiceField(
queryset=Transaction.objects.filter(<b>reconciled_type__isnull=True</b>),
required=True
)
# …
但是由于您重命名了该字段,因此查询集的构造将引发错误,您还需要更改查询:
class ReconciliationForm(forms.ModelForm):
transaction = forms.ModelChoiceField(
queryset=Transaction.objects.filter(<b>import_type=None</b>),
required=True
)
# …
您可能需要更改更多依赖于该字段的查询集。
这个错误的原因可能是因为django无法解析你的选择,
选择,应该是一个列表
IMPORT_TYPE_CHOICES = [ # converted to list from tuple
('r', 'Reconciled'),
('i', 'Ignore'),
]
烦人的问题。我想将模型中的字段从 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
在你的 ReconciliationForm
中你写了这样一行:
class ReconciliationForm(forms.ModelForm):
transaction = forms.ModelChoiceField(
queryset=Transaction.objects.filter(<b>reconciled_type__isnull=True</b>),
required=True
)
# …
但是由于您重命名了该字段,因此查询集的构造将引发错误,您还需要更改查询:
class ReconciliationForm(forms.ModelForm):
transaction = forms.ModelChoiceField(
queryset=Transaction.objects.filter(<b>import_type=None</b>),
required=True
)
# …
您可能需要更改更多依赖于该字段的查询集。
这个错误的原因可能是因为django无法解析你的选择, 选择,应该是一个列表
IMPORT_TYPE_CHOICES = [ # converted to list from tuple
('r', 'Reconciled'),
('i', 'Ignore'),
]