Circular import error
Closed this issue · 3 comments
JudahSan commented
I keep getting this error
ImportError: cannot import name 'UserEditForm' from 'users.forms'
Exception in thread django-main-thread:
Traceback (most recent call last):
File "/usr/lib/python3.10/threading.py", line 1016, in _bootstrap_inner
self.run()
File "/usr/lib/python3.10/threading.py", line 953, in run
self._target(*self._args, **self._kwargs)
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/utils/autoreload.py", line 64, in wrapper
fn(*args, **kwargs)
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/core/management/commands/runserver.py", line 134, in inner_run
self.check(display_num_errors=True)
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/core/management/base.py", line 475, in check
all_issues = checks.run_checks(
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/core/checks/registry.py", line 88, in run_checks
new_errors = check(app_configs=app_configs, databases=databases)
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/core/checks/urls.py", line 14, in check_url_config
return check_resolver(resolver)
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/core/checks/urls.py", line 24, in check_resolver
return check_method()
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/urls/resolvers.py", line 494, in check
for pattern in self.url_patterns:
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/utils/functional.py", line 57, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/urls/resolvers.py", line 715, in url_patterns
patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/utils/functional.py", line 57, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/urls/resolvers.py", line 708, in urlconf_module
return import_module(self.urlconf_name)
File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 883, in exec_module
File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
File "/home/jooda/python_projects/DjangoChatApp/chatproject/chatproject/urls.py", line 23, in <module>
path('users/', include('users.urls')),
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/urls/conf.py", line 38, in include
urlconf_module = import_module(urlconf_module)
File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 883, in exec_module
File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
File "/home/jooda/python_projects/DjangoChatApp/chatproject/users/urls.py", line 3, in <module>
from . import views
File "/home/jooda/python_projects/DjangoChatApp/chatproject/users/views.py", line 2, in <module>
from .forms import LoginForm, UserRegistrationForm, UserEditForm, ProfileEditForm
ImportError: cannot import name 'UserEditForm' from 'users.forms' (/home/jooda/python_projects/DjangoChatApp/chatproject/users/forms.py)
/home/jooda/python_projects/DjangoChatApp/chatproject/users/views.py changed, reloading.
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
January 25, 2023 - 15:08:34
Django version 4.1.5, using settings 'chatproject.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
[25/Jan/2023 15:08:43] "GET /admin/auth/user/ HTTP/1.1" 200 9375
[25/Jan/2023 15:08:43] "GET /admin/jsi18n/ HTTP/1.1" 200 3343
[25/Jan/2023 15:08:43] "GET /static/admin/js/vendor/jquery/jquery.js HTTP/1.1" 200 288580
[25/Jan/2023 15:08:43] "GET /static/admin/js/vendor/xregexp/xregexp.js HTTP/1.1" 200 232381
/home/jooda/python_projects/DjangoChatApp/chatproject/users/views.py changed, reloading.
Watching for file changes with StatReloader
Performing system checks...
Exception in thread django-main-thread:
Traceback (most recent call last):
File "/usr/lib/python3.10/threading.py", line 1016, in _bootstrap_inner
self.run()
File "/usr/lib/python3.10/threading.py", line 953, in run
self._target(*self._args, **self._kwargs)
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/utils/autoreload.py", line 64, in wrapper
fn(*args, **kwargs)
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/core/management/commands/runserver.py", line 134, in inner_run
self.check(display_num_errors=True)
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/core/management/base.py", line 475, in check
all_issues = checks.run_checks(
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/core/checks/registry.py", line 88, in run_checks
new_errors = check(app_configs=app_configs, databases=databases)
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/core/checks/urls.py", line 14, in check_url_config
return check_resolver(resolver)
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/core/checks/urls.py", line 24, in check_resolver
return check_method()
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/urls/resolvers.py", line 494, in check
for pattern in self.url_patterns:
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/utils/functional.py", line 57, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/urls/resolvers.py", line 715, in url_patterns
patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/utils/functional.py", line 57, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/urls/resolvers.py", line 708, in urlconf_module
return import_module(self.urlconf_name)
File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 883, in exec_module
File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
File "/home/jooda/python_projects/DjangoChatApp/chatproject/chatproject/urls.py", line 23, in <module>
path('users/', include('users.urls')),
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/urls/conf.py", line 38, in include
urlconf_module = import_module(urlconf_module)
File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 883, in exec_module
File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
File "/home/jooda/python_projects/DjangoChatApp/chatproject/users/urls.py", line 3, in <module>
from . import views
File "/home/jooda/python_projects/DjangoChatApp/chatproject/users/views.py", line 7, in <module>
from .forms import UserEditForm, ProfileEditForm
ImportError: cannot import name 'UserEditForm' from 'users.forms' (/home/jooda/python_projects/DjangoChatApp/chatproject/users/forms.py)
/home/jooda/python_projects/DjangoChatApp/chatproject/users/models.py changed, reloading.
Watching for file changes with StatReloader
Performing system checks...
Exception in thread django-main-thread:
Traceback (most recent call last):
File "/usr/lib/python3.10/threading.py", line 1016, in _bootstrap_inner
self.run()
File "/usr/lib/python3.10/threading.py", line 953, in run
self._target(*self._args, **self._kwargs)
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/utils/autoreload.py", line 64, in wrapper
fn(*args, **kwargs)
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/core/management/commands/runserver.py", line 134, in inner_run
self.check(display_num_errors=True)
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/core/management/base.py", line 475, in check
all_issues = checks.run_checks(
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/core/checks/registry.py", line 88, in run_checks
new_errors = check(app_configs=app_configs, databases=databases)
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/core/checks/urls.py", line 14, in check_url_config
return check_resolver(resolver)
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/core/checks/urls.py", line 24, in check_resolver
return check_method()
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/urls/resolvers.py", line 494, in check
for pattern in self.url_patterns:
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/utils/functional.py", line 57, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/urls/resolvers.py", line 715, in url_patterns
patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/utils/functional.py", line 57, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/urls/resolvers.py", line 708, in urlconf_module
return import_module(self.urlconf_name)
File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 883, in exec_module
File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
File "/home/jooda/python_projects/DjangoChatApp/chatproject/chatproject/urls.py", line 23, in <module>
path('users/', include('users.urls')),
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/urls/conf.py", line 38, in include
urlconf_module = import_module(urlconf_module)
File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 883, in exec_module
File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
File "/home/jooda/python_projects/DjangoChatApp/chatproject/users/urls.py", line 3, in <module>
from . import views
File "/home/jooda/python_projects/DjangoChatApp/chatproject/users/views.py", line 7, in <module>
from .forms import UserEditForm, ProfileEditForm
ImportError: cannot import name 'UserEditForm' from 'users.forms' (/home/jooda/python_projects/DjangoChatApp/chatproject/users/forms.py)
^C(env) jooda@jooda-HP-ENVY-Notebook:~/python_projects/DjangoChatApp/chatproject$ python manage.py validate --traceback
Unknown command: 'validate'. Did you mean validate_templates?
Type 'manage.py help' for usage.
(env) jooda@jooda-HP-ENVY-Notebook:~/python_projects/DjangoChatApp/chatproject$ ls
chatproject db.sqlite3 manage.py media users
(env) jooda@jooda-HP-ENVY-Notebook:~/python_projects/DjangoChatApp/chatproject$ python manage.py check --traceback
Traceback (most recent call last):
File "/home/jooda/python_projects/DjangoChatApp/chatproject/manage.py", line 22, in <module>
main()
File "/home/jooda/python_projects/DjangoChatApp/chatproject/manage.py", line 18, in main
execute_from_command_line(sys.argv)
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/core/management/__init__.py", line 446, in execute_from_command_line
utility.execute()
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/core/management/__init__.py", line 440, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/core/management/base.py", line 402, in run_from_argv
self.execute(*args, **cmd_options)
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/core/management/base.py", line 448, in execute
output = self.handle(*args, **options)
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/core/management/commands/check.py", line 76, in handle
self.check(
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/core/management/base.py", line 475, in check
all_issues = checks.run_checks(
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/core/checks/registry.py", line 88, in run_checks
new_errors = check(app_configs=app_configs, databases=databases)
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/core/checks/urls.py", line 14, in check_url_config
return check_resolver(resolver)
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/core/checks/urls.py", line 24, in check_resolver
return check_method()
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/urls/resolvers.py", line 494, in check
for pattern in self.url_patterns:
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/utils/functional.py", line 57, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/urls/resolvers.py", line 715, in url_patterns
patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/utils/functional.py", line 57, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/urls/resolvers.py", line 708, in urlconf_module
return import_module(self.urlconf_name)
File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 883, in exec_module
File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
File "/home/jooda/python_projects/DjangoChatApp/chatproject/chatproject/urls.py", line 23, in <module>
path('users/', include('users.urls')),
File "/home/jooda/python_projects/DjangoChatApp/env/lib/python3.10/site-packages/django/urls/conf.py", line 38, in include
urlconf_module = import_module(urlconf_module)
File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 883, in exec_module
File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
File "/home/jooda/python_projects/DjangoChatApp/chatproject/users/urls.py", line 3, in <module>
from . import views
File "/home/jooda/python_projects/DjangoChatApp/chatproject/users/views.py", line 7, in <module>
from .forms import UserEditForm, ProfileEditForm
ImportError: cannot import name 'UserEditForm' from 'users.forms' (/home/jooda/python_projects/DjangoChatApp/chatproject/users/forms.py)
JudahSan commented
views.py
file
from django.shortcuts import render
from .forms import LoginForm, UserRegistrationForm, UserEditForm, ProfileEditForm
from django.contrib.auth import authenticate, login
from django.http import HttpResponse
from django.contrib.auth.decorators import login_required
from .models import Profile
# Create your views here.
def user_login(request):
if request.method == 'POST':
form = LoginForm(request.POST)
if form.is_valid():
data = form.cleaned_data
user = authenticate(request, username=data['username'], password=data['password'])
if user is not None:
login(request, user)
return HttpResponse("user authenticated and logged in")
else:
return HttpResponse("Invalid credentials")
else:
form = LoginForm()
return render(request, 'users/login.html', {'form':form})
@login_required
def index(request):
return render(request, 'users/index.html')
def register(request):
if request.method == 'POST':
user_form = UserRegistrationForm(request.POST)
if user_form.is_valid():
new_user = user_form.save(commit=False)
new_user.set_password(user_form.cleaned_data['password'])
new_user.save()
Profile.objects.create(user=new_user)
return render(request, 'users/register_done.html')
else:
user_form = UserRegistrationForm()
return render(request, 'users/register.html', {'user_form': user_form} )
# Edit view
@login_required
def edit(request):
if request.method == 'POST':
user_form = UserEditForm(instance=request.user, data=request.POST)
profile_form = ProfileEditForm(instance=request.user.profile, data=request.POST, files=request.FILES)
if user_form.is_valid() and profile_form.is_valid():
user_form.save()
profile_form.save()
else:
user_form=UserEditForm(instance=request.user)
profile_form=ProfileEditForm(instance=request.user.profile)
return render(request, 'users/edit.html', {'user_form':user_form, 'profile_form':profile_form})
JudahSan commented
forms.py
file
from django import forms
from django.contrib.auth.models import User
from .models import Profile
class UserEditForm(forms.ModelForm):
class Meta:
model = User
fields = ('first_name', 'last_name', 'email')
class ProfileEditForm(forms.ModelForm):
class Meta:
model = Profile
fields = ('photo',)
class LoginForm(forms.Form):
username = forms.CharField()
password = forms.CharField(widget=forms.PasswordInput)
# User registration form
class UserRegistrationForm(forms.ModelForm):
# meta class
password = forms.CharField(label='Password', widget=forms.PasswordInput)
password2 = forms.CharField(label='Password', widget=forms.PasswordInput)
class Meta:
model = User
fields = {'username', 'email', 'first_name'}
# Check if passwords match
def check_password(self):
if self.cleaned_data['password'] != self.cleaned_data['password2']:
raise forms.ValidationError('Passwords do not match')
return self.cleaned_data['password2']
JudahSan commented
Solutions
- Stackoverflow solution
- Refactoring the second line of
view.py
file fixed my problem
old
from .forms import LoginForm, UserRegistrationForm, UserEditForm, ProfileEditForm
new
from .forms import *