django.db.utils.ProgrammingError: (1146 таблица не существует) - PullRequest
0 голосов
/ 13 сентября 2018

У меня проблема с миграциями в Python Django.Когда я пытаюсь выполнить pym manage.py makemigrations или мигрировать, появляется эта ошибка. 100

Traceback (последний вызов был последним): Файл "C: \ Source \ Git \ Suisseedu \ resourcecenter2 \ResourceCenter \ ResourceCenter \ env \ lib \ site-packages \ django \ db \ backends \ utils.py ", строка 65, в файле execute возвращают self.cursor.execute (sql, params) Файл" C: \ Source \ Git \ Suisseedu \ "resourcecenter2 \ ResourceCenter \ ResourceCenter \ env \ lib \ site-packages \ django \ db \ backends \ mysql \ base.py ", строка 101, в файле execute выполнить self.cursor.execute (query, args) Файл" C: \ Source \ "Git \ Suisseedu \ resourcecenter2 \ ResourceCenter \ ResourceCenter \ env \ lib \ site-packages \ MySQLdb \ cursors.py ", строка 250, в файле execute self.errorhandler (self, exc, value) Файл" C: \ Source \ Git \ Suisseedu\ resourcecenter2 \ ResourceCenter \ ResourceCenter \ env \ lib \ site-packages \ MySQLdb \ connections.py ", строка 50, в файле defaulterrorhandler поднимать значение ошибки Файл" C: \ Source \ Git \ Suisseedu \ resourcecenter2 \ ResourceCenter \ ResourceCenter \ env \ lib \сайт-пакеты \ MySQLdb \ cursors.py», строка 247, в исполняемом файле res = self._query (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) _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Утилита util.execute (), файл "C: \ Source \ Git \ Suisseedu \ resourcecenter2 \ ResourceCenter \ ResourceCenter \ env \ lib \ site-packages \ django \ core \ management__init __. py", строка 355, в строке execute self.fetch_command (подкоманда).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, в файле executeФайл 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 возвращает check.run_checks (** kwargs)Файл "C: \ Source \ Gi"t \ Suisseedu \ resourcecenter2 \ ResourceCenter \ ResourceCenter \ env \ lib \ site-packages \ django \ core \ check \ 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 \ check \ urls.py ", строка 16, в check_url_config, возвращают check_resolver (resolver), файл" C: \ Source \ Git \ Suisseedu \ resourcecenter2\ ResourceCenter \ ResourceCenter \ env \ lib \ site-packages \ django \ core \ check \ 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 \ functions.py", строка 35, в получить res = instance. dict [self.name] = self.func (instance) Файл "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 \ functions.py ", строка 35, в get res = instance. dict [self.name] = self.func (instance) Файл" 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 (имя [уровень:], пакет, уровень) Файл "", строка 994, в файле _gcd_import "", строка 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 /', include ("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 возвращаем _bootstrap._gcd_import (имя [уровень:], пакет, уровень) Файл "", строка 994, в файле _gcd_import "", строка 971, в файле _find_and_load "", строка 955, в файле _find_and_load_unlocked "",строка 665, в _load_разблокирован
Файл "", строка 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")] + список ([(r.id, str (r)) для r в 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 \ окр \ Lib \ сайт-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 results = 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_sqlcursor.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) Файл "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, в выход six.reraise (dj_exc_type, dj_exc_value, traceback) Файл "C: \ Source \ Git \ Suisseedu \ resourcecenter2 \ ResourceCenter \ ResourceCenter \ env \ lib \ site-packages \ django \ utils \ six.py", линия 685, в ререйзе поднять 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, в исполнении return 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, в defaulterrorhandler поднять errorvalue Файл "C: \ Source \ Git \ Suisseedu \ resourcecenter2 \ ResourceCenter \ ResourceCenter \ env \ lib \ site-packages \ MySQLdb \ cursors.py", строка 247, в исполнении res = self._query (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, "Таблица" 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

Edit:

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)

1 Ответ

0 голосов
/ 13 сентября 2018

Для поля формы с вариантами выбора из модели вы всегда должны использовать ModelChoiceField с набором запросов.

role = forms.ModelChoiceField(queryset=Role.objects.all(), empty_label="Auswählen")

Использование статических вариантов не только дает вам проблему, с которой вы столкнулись, но и предотвращаетвыбор из обновления, когда объекты роли добавляются или редактируются.Использование ModelChoiceField сделает запрос в соответствующее время, гарантируя, что он всегда актуален.

...