Я пытаюсь создать модель UserProfile
в моем пользовательском приложении и вместо наследования от models.Model
я наследую от собственной модели User
django, чтобы у меня была пользовательская модель с дополнительными полями.Но когда я запускаю команду python manage.py test
, она выдает мне следующую ошибку:
Creating test database for alias 'default'...
Traceback (most recent call last):
File "manage.py", line 15, in <module>
execute_from_command_line(sys.argv)
File "C:\Users\User\AppData\Local\Programs\lib\site-packages\django\core\management\__init__.py", line 381, in execute_from_command_line
utility.execute()
File "C:\Users\User\AppData\Local\Programs\lib\site-packages\django\core\management\__init__.py", line 375, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "C:\Users\User\AppData\Local\Programs\lib\site-packages\django\core\management\commands\test.py", line 26, in run_from_argv
super().run_from_argv(argv)
File "C:\Users\User\AppData\Local\Programs\lib\site-packages\django\core\management\base.py", line 316, in run_from_argv
self.execute(*args, **cmd_options)
File "C:\Users\User\AppData\Local\Programs\lib\site-packages\django\core\management\base.py", line 353, in execute
output = self.handle(*args, **options)
File "C:\Users\User\AppData\Local\Programs\lib\site-packages\django\core\management\commands\test.py", line 56, in handle
failures = test_runner.run_tests(test_labels)
File "C:\Users\User\AppData\Local\Programs\lib\site-packages\django\test\runner.py", line 604, in run_tests
old_config = self.setup_databases()
File "C:\Users\User\AppData\Local\Programs\lib\site-packages\django\test\runner.py", line 551, in setup_databases
self.parallel, **kwargs
File "C:\Users\User\AppData\Local\Programs\lib\site-packages\django\test\utils.py", line 174, in setup_databases
serialize=connection.settings_dict.get('TEST', {}).get('SERIALIZE', True),
File "C:\Users\User\AppData\Local\Programs\lib\site-packages\django\db\backends\base\creation.py", line 68, in create_test_db
run_syncdb=True,
File "C:\Users\User\AppData\Local\Programs\lib\site-packages\django\core\management\__init__.py", line 148, in call_command
return command.execute(*args, **defaults)
File "C:\Users\User\AppData\Local\Programs\lib\site-packages\django\core\management\base.py", line 353, in execute
output = self.handle(*args, **options)
File "C:\Users\User\AppData\Local\Programs\lib\site-packages\django\core\management\base.py", line 83, in wrapped
res = handle_func(*args, **kwargs)
File "C:\Users\User\AppData\Local\Programs\lib\site-packages\django\core\management\commands\migrate.py", line 203, in handle
fake_initial=fake_initial,
File "C:\Users\User\AppData\Local\Programs\lib\site-packages\django\db\migrations\executor.py", line 117, in migrate
state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial)
File "C:\Users\User\AppData\Local\Programs\lib\site-packages\django\db\migrations\executor.py", line 147, in _migrate_all_forwards
state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
File "C:\Users\User\AppData\Local\Programs\lib\site-packages\django\db\migrations\executor.py", line 244, in apply_migration
state = migration.apply(state, schema_editor)
File "C:\Users\User\AppData\Local\Programs\lib\site-packages\django\db\migrations\migration.py", line 124, in apply
operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
File "C:\Users\User\AppData\Local\Programs\lib\site-packages\django\db\migrations\operations\fields.py", line 216, in database_forwards
schema_editor.alter_field(from_model, from_field, to_field)
File "C:\Users\User\AppData\Local\Programs\lib\site-packages\django\db\backends\sqlite3\schema.py", line 127, in alter_field
super().alter_field(model, old_field, new_field, strict=strict)
File "C:\Users\User\AppData\Local\Programs\lib\site-packages\django\db\backends\base\schema.py", line 495, in alter_field
new_db_params = new_field.db_parameters(connection=self.connection)
File "C:\Users\User\AppData\Local\Programs\lib\site-packages\django\db\models\fields\related.py", line 966, in db_parameters
return {"type": self.db_type(connection), "check": self.db_check(connection)}
File "C:\Users\User\AppData\Local\Programs\lib\site-packages\django\db\models\fields\related.py", line 963, in db_type
return self.target_field.rel_db_type(connection=connection)
File "C:\Users\User\AppData\Local\Programs\lib\site-packages\django\db\models\fields\related.py", line 878, in target_field
return self.foreign_related_fields[0]
File "C:\Users\User\AppData\Local\Programs\lib\site-packages\django\db\models\fields\related.py", line 632, in foreign_related_fields
return tuple(rhs_field for lhs_field, rhs_field in self.related_fields if rhs_field)
File "C:\Users\User\AppData\Local\Programs\lib\site-packages\django\db\models\fields\related.py", line 619, in related_fields
self._related_fields = self.resolve_related_fields()
File "C:\Users\User\AppData\Local\Programs\lib\site-packages\django\db\models\fields\related.py", line 604, in resolve_related_fields
raise ValueError('Related model %r cannot be resolved' % self.remote_field.model)
ValueError: Related model 'user.UserProfile' cannot be resolved
Вот как выглядит мой models.py
.
class UserProfile(User):
levels = [
('Beginner', 'Beginner'),
('Elementary', 'Elementary'),
('Pre-Intermediate', 'Pre-Intermediate'),
('Intermediate', 'Intermediate'),
('Upper-Intermediate', 'Upper-Intermediate'),
('Advanced', 'Advanced'),
]
courses = [
('English', 'English'),
('Russian', 'Russian'),
('Mathematics', 'Mathematics'),
]
titles = [
('Teacher', 'Teacher'),
('Student', 'Student'),
]
icons = [
('fa-user', 'User'),
('fa-user-graduate', 'Student'),
('fa-user-ninja', 'Ninja'),
('fa-user-tie', 'Tie'),
('fa-user-md', 'Doctor'),
('fa-user-astronaut', 'Astronaut'),
('fa-user-secret', 'Spy'),
('fa-user-injured', 'Injured'),
]
bio = models.TextField(blank=True)
country = models.CharField(max_length = 100)
course = models.CharField(
max_length = 20,
choices=courses,
default='English',
)
level = models.CharField(
max_length = 20,
choices=levels,
default='Beginner',
)
title = models.CharField(
max_length = 20,
choices=titles,
default='Student',
)
avatar = models.ImageField(default='avatars/default_avatar.jpg', upload_to='avatars')
icon = models.CharField(
max_length = 150,
choices = icons,
default = 'fa-user'
)
def is_student(self):
return self.title == 'Student'
def is_teacher(self):
return self.title == 'Teacher'
def get_absolute_url(self):
return reverse('user-profile', kwargs={'slug': self.username})
def __str__(self):
return f'{self.username} Profile'
def save(self, **kwargs):
super().save()
img = Image.open(self.avatar.path)
if img.height != img.width:
w = img.width
h = img.height
if h > w:
a = h - w
box = (a/2, a/2, w, w)
else:
a = w - h
box = (a/2, a/2, h, h)
img = img.crop(box)
if img.height > 500 or img.width > 500:
output_size = (500, 500)
img.thumbnail(output_size)
img.save(self.avatar.path)
else:
img.save(self.avatar.path)
И я добавил его вsettings.py