I got the following error after adding a new model field and running the makemigrations command:
ImportError: cannot import name 'FieldDoesNotExist' from 'django.db.models' (/usr/local/lib/python3.7/site-packages/django/db/models/init.py)
this is what my models.py looks like:
import uuid
from django.contrib.auth import get_user_model
from django.db import models
from django.urls import reverse
# Create your models here.
class Book(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
title = models.CharField(max_length=200)
author = models.CharField(max_length=200)
price = models.DecimalField(max_digits=6, decimal_places=2)
cover = models.ImageField(upload_to='covers/', blank=True) # New Field
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('book_detail', args=[str(self.id)])
class Review(models.Model):
book = models.ForeignKey(Book, on_delete=models.CASCADE, related_name='reviews')
review = models.CharField(max_length=255)
author = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
def __str__(self):
return self.review
This is the current state of my migrations files, I have two. 0001_initial.py
# Generated by Django 3.0.8 on 2020-08-01 13:11
from django.db import migrations, models
import uuid
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Book',
fields=[
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
('title', models.CharField(max_length=200)),
('author', models.CharField(max_length=200)),
('price', models.DecimalField(decimal_places=2, max_digits=6)),
],
),
]
0002_review.py
# Generated by Django 3.0.8 on 2020-08-06 11:21
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('books', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='Review',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('review', models.CharField(max_length=255)),
('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
('book', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='reviews', to='books.Book')),
],
),
]
This is the exception traceback after running makemigration command:
Exception in thread django-main-thread:
web_1 | Traceback (most recent call last):
web_1 | File "/usr/local/lib/python3.7/threading.py", line 926, in _bootstrap_inner
web_1 | self.run()
web_1 | File "/usr/local/lib/python3.7/threading.py", line 870, in run
web_1 | self._target(*self._args, **self._kwargs)
web_1 | File "/usr/local/lib/python3.7/site-packages/django/utils/autoreload.py", line 53, in wrapper
web_1 | fn(*args, **kwargs)
web_1 | File "/usr/local/lib/python3.7/site-packages/django/core/management/commands/runserver.py", line 110, in inner_run
web_1 | autoreload.raise_last_exception()
web_1 | File "/usr/local/lib/python3.7/site-packages/django/utils/autoreload.py", line 76, in raise_last_exception
web_1 | raise _exception[1]
web_1 | File "/usr/local/lib/python3.7/site-packages/django/core/management/__init__.py", line 357, in execute
web_1 | autoreload.check_errors(django.setup)()
web_1 | File "/usr/local/lib/python3.7/site-packages/django/utils/autoreload.py", line 53, in wrapper
web_1 | fn(*args, **kwargs)
web_1 | File "/usr/local/lib/python3.7/site-packages/django/__init__.py", line 24, in setup
web_1 | apps.populate(settings.INSTALLED_APPS)
web_1 | File "/usr/local/lib/python3.7/site-packages/django/apps/registry.py", line 114, in populate
web_1 | app_config.import_models()
web_1 | File "/usr/local/lib/python3.7/site-packages/django/apps/config.py", line 211, in import_models
web_1 | self.models_module = import_module(models_module_name)
web_1 | File "/usr/local/lib/python3.7/importlib/__init__.py", line 127, in import_module
web_1 | return _bootstrap._gcd_import(name[level:], package, level)
web_1 | File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
web_1 | File "<frozen importlib._bootstrap>", line 983, in _find_and_load
web_1 | File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
web_1 | File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
web_1 | File "<frozen importlib._bootstrap_external>", line 728, in exec_module
web_1 | File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
web_1 | File "/usr/local/lib/python3.7/site-packages/allauth/account/models.py", line 14, in <module>
web_1 | from .adapter import get_adapter
web_1 | File "/usr/local/lib/python3.7/site-packages/allauth/account/adapter.py", line 31, in <module>
web_1 | from ..utils import (
web_1 | File "/usr/local/lib/python3.7/site-packages/allauth/utils.py", line 15, in <module>
web_1 | from django.db.models import FieldDoesNotExist, FileField
web_1 | ImportError: cannot import name 'FieldDoesNotExist' from 'django.db.models' (/usr/local/lib/python3.7/site-packages/django/db/models/__init__.py)
So, I do not know what exactly caused this error and am stuck at this stage. Any help would be greatly appreciated.
In my case, Django version 3.1.3
conflicted with django-filter 2.0.0
.
Similar error message. But the last lines of error said that it was graphene-django
. However, in the middle, it says django-filter
. When I looked into the django-filter
source file, there was a wrong import of FieldDoesNotExist
. When I upgrade django-filter
to version 2.4.0
, problem solved.
Your version of django-allauth
has the incorrect import for FieldDoesNotExist
. The correct import is:
from django.core.exceptions import FieldDoesNotExist
The import from django.db.models
presumably worked in older versions of Django.
The import was fixed in django-allauth
in version 0.41.0. If you update django-allauth
in your requirements.txt
or pipenv it should fix the problem.
In OP's case it was django-allauth, in my case django-filter.
Check the last line in error log that shows the file in which from django.db.models import FieldDoesNotExist, FileField
is imported and try upgrading that package.
In OP's case the error log line was this:
File "/usr/local/lib/python3.7/site-packages/allauth/utils.py"...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With