【发布时间】:2019-02-18 00:06:36
【问题描述】:
我在 python django 中的迁移有问题。当我尝试执行 python manage.py makemigrations 或 migrate 时出现此错误.????♂️
Traceback(最近一次调用最后一次):文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\db\backends\utils.py", 第 65 行,在执行中 return self.cursor.execute(sql, params) 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\db\backends\mysql\base.py", 第 101 行,在执行中 返回 self.cursor.execute(query, args) 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\MySQLdb\cursors.py", 第 250 行,执行中 self.errorhandler(self, exc, value) 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\MySQLdb\connections.py", 第 50 行,在默认错误处理程序中 引发错误值文件“C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\MySQLdb\cursors.py”, 第 247 行,执行中 res = self._query(查询)文件“C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\MySQLdb\cursors.py”, 第 412 行,在 _query 中 rowcount = self._do_query(q) 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\MySQLdb\cursors.py", 第 375 行,在 _do_query db.query(q) 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\MySQLdb\connections.py", 第 276 行,查询中 _mysql.connection.query(自我,查询) _mysql_exceptions.ProgrammingError: (1146, "表 'rc2.eduuser_role' 不存在")
上述异常是以下异常的直接原因:
Traceback(最近一次调用最后一次):文件“manage.py”,第 17 行,在 execute_from_command_line(sys.argv) 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\core\management__init__.py", 第 363 行,在 execute_from_command_line utility.execute() 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\core\management__init__.py", 第 355 行,执行中 self.fetch_command(subcommand).run_from_argv(self.argv) 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\core\management\base.py", 第 283 行,在 run_from_argv self.execute(*args, **cmd_options) 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\core\management\base.py", 第 327 行,执行中 self.check() 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\core\management\base.py", 第 359 行,检查中 include_deployment_checks=include_deployment_checks,文件“C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\core\management\base.py”, 第 346 行,在 _run_checks 返回 checks.run_checks(**kwargs) 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\core\checks\registry.py", 第 81 行,在 run_checks new_errors = check(app_configs=app_configs) 文件“C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\core\checks\urls.py”, 第 16 行,在 check_url_config 中 返回 check_resolver(resolver) 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\core\checks\urls.py", 第 26 行,在 check_resolver 中 返回 check_method() 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\urls\resolvers.py", 第 254 行,检查中 对于 self.url_patterns 中的模式:文件“C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\utils\functional.py”, 第 35 行,在 get 中 res = instance.dict[self.name] = self.func(instance) File "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django \urls\resolvers.py", 第 405 行,在 url_patterns 中 模式= getattr(self.urlconf_module,“urlpatterns”,self.urlconf_module)文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\utils\functional.py", 第 35 行,在 get 中 res = instance.dict[self.name] = self.func(instance) File "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django \urls\resolvers.py", 第 398 行,在 urlconf_module 中 返回 import_module(self.urlconf_name) 文件 "C:\Users\Tim\AppData\Local\Programs\Python\Python36-32\lib\importlib__init__.py", 第 126 行,在 import_module 中 return _bootstrap._gcd_import(name[level:], package, level) File "", line 994, in _gcd_import File "",第 971 行,在 _find_and_load 文件中 “”,第 955 行,在 _find_and_load_unlocked 文件“”,第 665 行,在 _load_unlocked
文件“”,第 678 行,在 exec_module 文件“”,第 219 行,在 _call_with_frames_removed 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\ResourceCenter\urls.py", 第 24 行,在 url(r'^eduuser/', 包括("eduuser.urls", namespace="eduuser")), 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\conf\urls__init__.py", 第 50 行,包括 urlconf_module = import_module(urlconf_module) 文件 "C:\Users\Tim\AppData\Local\Programs\Python\Python36-32\lib\importlib__init__.py", 第 126 行,在 import_module 中 return _bootstrap._gcd_import(name[level:], package, level) File "", line 994, in _gcd_import File "",第 971 行,在 _find_and_load 文件中 “”,第 955 行,在 _find_and_load_unlocked 文件“”,第 665 行,在 _load_unlocked
文件“”,第 678 行,在 exec_module 文件“”,第 219 行,在 _call_with_frames_removed 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\eduuser\urls.py", 第 2 行,在 从 eduuser 导入视图文件“C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\eduuser\views.py”, 第 7 行,在 从 eduuser.forms 导入 ForgotEmailForm 文件“C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\eduuser\forms.py”, 第 107 行,在 类 ImportUserForm(forms.Form): 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\eduuser\forms.py", 第 123 行,在 ImportUserForm 中 role_choices = tuple([(u'', "Auswählen")] + list([(r.id, str(r)) for r in Role.objects.all()])) 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\db\models\query.py", 第 250 行,在 iter 中 self._fetch_all() 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\db\models\query.py", 第 1118 行,在 _fetch_all 中 self._result_cache = list(self._iterable_class(self)) 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\db\models\query.py", 第 53 行,在 iter 中 结果 = compiler.execute_sql(chunked_fetch=self.chunked_fetch) 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\db\models\sql\compiler.py", 第 886 行,在 execute_sql 中 引发 original_exception 文件“C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\db\models\sql\compiler.py”, 第 876 行,在 execute_sql 中 cursor.execute(sql, params) 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\db\backends\utils.py", 第 80 行,在执行中 return super(CursorDebugWrapper, self).execute(sql, params) File "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\db\backends\utils.py", 第 65 行,在执行中 return self.cursor.execute(sql, params) 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\db\utils.py", 第 94 行,在 退出 六.reraise(dj_exc_type, dj_exc_value, traceback) 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\utils\six.py", 第 685 行,在再加注中 raise value.with_traceback(tb) 文件“C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\db\backends\utils.py”, 第 65 行,在执行中 return self.cursor.execute(sql, params) 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\db\backends\mysql\base.py", 第 101 行,在执行中 返回 self.cursor.execute(query, args) 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\MySQLdb\cursors.py", 第 250 行,执行中 self.errorhandler(self, exc, value) 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\MySQLdb\connections.py", 第 50 行,在默认错误处理程序中 引发错误值文件“C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\MySQLdb\cursors.py”, 第 247 行,执行中 res = self._query(查询)文件“C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\MySQLdb\cursors.py”, 第 412 行,在 _query 中 rowcount = self._do_query(q) 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\MySQLdb\cursors.py", 第 375 行,在 _do_query db.query(q) 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\MySQLdb\connections.py", 第 276 行,查询中 _mysql.connection.query(self, query) django.db.utils.ProgrammingError: (1146, "Table 'rc2.eduuser_role' 不存在”)
代码:
from django.db import models
from django.utils.translation import gettext_lazy as _
from settings import base
from eduuser.managers import EduUserManager
from phonenumber_field.modelfields import PhoneNumberField
# ** AUTH USER **
from django.contrib.auth.models import (
AbstractBaseUser,PermissionsMixin
)
# ------------
# ROLE
# ------------
class Role(models.Model):
name = models.CharField(
_("Role Name"),
max_length=100,
unique=True,
)
def __str__(self):
return self.name
# -------------
# EduUser
# -------------
class EduUser(AbstractBaseUser,PermissionsMixin):
objects = EduUserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
first_name = models.CharField(
_("First Name"),
default="",
blank=False,
max_length=255)
last_name = models.CharField(
_("Last Name"),
default = "",
blank=False,
max_length=255)
eduId = models.CharField(
_("EduId"),
blank=False,
unique=True,
db_index=True,
error_messages={
'unique': _("A user with that eduId already exists."),
},
max_length=255)
age = models.IntegerField(
_("Age"),
blank=True,
null=True,
)
GENDER_CHOICES = (
('N', 'None'),
('M', 'Male'),
('F', 'Female'),
)
gender = models.CharField(
_("Gender"),
max_length=1,
choices=GENDER_CHOICES)
email = models.EmailField(
_("Email"),
max_length=255,
unique=True,
error_messages={
'unique': _("A user with that email address already exists."),
},
)
verify_key = models.IntegerField(blank=True, null=True)
verify_key_expires = models.DateTimeField(blank=True, null=True)
email_verify = models.BooleanField(default=False)
password_forgot_key = models.CharField(
_("Password_Forgot_Key"),
blank=True,
unique=True,
max_length=255)
password_forgot_key_expires = models.DateTimeField(blank=True, null=True)
health_info = models.TextField(
_("Health Informations"),
default="No Special Informations")
special_info = models.TextField(
_("Special Informations"),
default="No Special Informations")
resume_info = models.TextField(
_("Biography"),
default="No Bio set")
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
is_first_steps = models.BooleanField(default=True)
date_of_birth = models.DateField(default="2000-01-01")
school_start_date = models.DateField(default="2000-01-01")
eduuser_read = models.ManyToManyField(
base.AUTH_USER_MODEL,
related_name="eduuser_read_set",
blank=True,
)
eduuser_write = models.ManyToManyField(
base.AUTH_USER_MODEL,
related_name="eduuser_write_set",
blank=True,
)
role = models.ManyToManyField(
"Role",
_("Role"),
blank=False,
db_index=True,
)
address = models.ForeignKey("country.Address",
blank=True,
null=True,
default=None,
)
phone_number = PhoneNumberField(blank=True)
def get_full_name(self):
# The user is identified by their email address
return "" + self.first_name + " " + self.last_name
def get_short_name(self):
# The user is identified by their email address
return self.email
def has_perm(self, perm, obj=None):
"Does the user have a specific permission?"
# Simplest possible answer: Yes, always
return True
def has_module_perms(self, app_label):
"Does the user have permissions to view the app `app_label`?"
# Simplest possible answer: Yes, always
return True
def is_staff(self):
"Is the user a member of staff?"
# Simplest possible answer: All admins are staff
return self.is_admin
def __str__(self):
if self.first_name and self.last_name:
return "" + self.first_name + " " + self.last_name
else:
return "" + self.email
# -------------
# Import Maching Table
# -------------
class ImportMatch(models.Model):
role = models.OneToOneField(
"Role",
blank=False,
db_index=True,
related_name="role_host_set"
)
role_allowed = models.ManyToManyField(
"Role",
blank=False,
db_index=True,
related_name="allowed_role_set"
)
def __str__(self):
return "" + str(self.role) + " Import Allowed Table"
# -------------
# Import Role Mapper
# -------------
class RoleMapper(models.Model):
role = models.OneToOneField(
"Role",
blank=False,
db_index=True,
)
role_map = models.TextField(
_("Trennen mit Komma"),
blank=False,
)
def __str__(self):
return "" + str(self.role) + " Mapper"
有人可以帮我解决这个问题吗? 版本 Python:3.6.6 版本 Django:1.11.3
编辑:
role_choices = tuple([(u'', "Auswählen")] + list([(r.id, str(r)) for r in Role.objects.all()]))
role = forms.ChoiceField(widget=forms.Select, choices=role_choices)
【问题讨论】:
-
听起来好像有东西在加载模块时试图查询角色表(例如
Role.objects.all()),但我们无法从您发布的代码中判断问题出在哪里。请在您的问题中包含完整的回溯。 -
另外,请说明您是否对数据库或数据库设置进行了任何更改,并发布命令的完整输出。
-
问题出在 eduuser/forms.py 中,正如 Alasdair 所说,您正在类定义中进行查询。显示该表单的代码会更好,但通常您应该使用带有查询集的 ModelChoiceField,而不是带有从模型中查询的一组选项的 ChoiceField。
-
@DanielRoseman 在编辑中,您可以看到表单中的行。我应该做哪些改变?
标签: python django django-models