Таблица пользователей Django удалена и не может перенастроить - PullRequest
0 голосов
/ 21 апреля 2019

По причинам, которые лучше не объяснять, я удалил все таблицы и файлы миграции в базе данных для моего личного проекта Django. Я думал, что запуск makemigrations и migrate восстановит его, однако команда migrate не удалась.

Запуск python manage.py migrate Результат:

django.contrib.auth.models.DoesNotExist: запрос на сопоставление пользователей не выполняется есть.

Я могу запустить сервер. Однако при переходе на страницу администратора (http://127.0.0.1:8000/admin/), я получаю исключение:

Во время обработки вышеуказанного исключения (объект 'SessionStore' не имеет атрибут '_session_cache'), произошло другое исключение:

Вышеуказанное исключение (отношение "django_session" не существует ЛИНИЯ 1: ... ession_data "," django_session "." expire_date "FROM" django_se ... ^) была прямой причиной следующего исключения:

В информации запроса указано «[невозможно получить текущего пользователя]».

Мне удалось заново создать суперпользователя, и у меня есть все таблицы, кроме моделей, в моем основном приложении:

UNKNOWN_USER_ID = 11    

def get_unknown_user():
        return User.objects.get(id=UNKNOWN_USER_ID).pk

class CommonInfo(models.Model):
    created = models.DateTimeField(auto_now_add=True, editable=False, verbose_name='Created')
    created_by = models.ForeignKey(User, on_delete=models.PROTECT, default=get_unknown_user,
                                   related_name='%(app_label)s_%(class)s_created', verbose_name='Created By')
    modified = models.DateTimeField(auto_now=True, verbose_name='Modified')
    modified_by = models.ForeignKey(User, on_delete=models.PROTECT, default=get_unknown_user,
                                    related_name='%(app_label)s_%(class)s_modified', verbose_name='Modified By')

    class Meta:
        abstract = True


class CollectionItem(CommonInfo):
    NONE_SELECTED = 0
    DONATED = 1
    PURCHASED = 2
    TRADED = 3
    FOUND = 4
    CREATED = 5

    METHOD_ACQUIRED_CHOICES = (
        (NONE_SELECTED, ''),
        (DONATED, 'Donated'),
        (PURCHASED, 'Purchased'),
        (TRADED, 'Traded'),
        (FOUND, 'Found'),
        (CREATED, 'Created')
    )

    date_acquired = models.DateField(default=date.today, verbose_name='Date Acquired')
    method_acquired = models.IntegerField(choices=METHOD_ACQUIRED_CHOICES, default=NONE_SELECTED,
                                          verbose_name='Method Acquired')
    available_for_trade = models.BooleanField(default=False, verbose_name='Available For Trade')
    tags = TaggableManager(verbose_name='Tags')
    description = models.CharField(max_length=512, blank=True, verbose_name='Description')
    collection = models.ForeignKey('Collection', on_delete=models.PROTECT, verbose_name='Collection ID')

    class Meta:
        abstract = True


class CollectionType(CommonInfo):
    name = models.CharField(max_length=100)

    def __str__(self):
        return self.name


class Collection(CommonInfo):
    name = models.CharField(max_length=100)
    collection_type = models.ForeignKey('CollectionType', on_delete=models.PROTECT)
    owner = models.ForeignKey(User, on_delete=models.PROTECT, default=get_unknown_user,
                              related_name='%(app_label)s_%(class)s_owned')
    # fieldset = models.ForeignKey('CollectionFieldset', on_delete=models.PROTECT)

    def __str__(self):
        return self.name


class CollectionItemImage(CommonInfo):
    image = models.ImageField(verbose_name='Image')
    collection_item = models.ForeignKey('BottleCap', on_delete=models.PROTECT, verbose_name='Collection Item')
    order_in_collection = models.IntegerField(verbose_name='Order', default=1)


class BottleCap(CollectionItem):
    company = models.CharField(max_length=100, blank=True, verbose_name='Company')
    brand = models.CharField(max_length=100, blank=True, verbose_name='Brand')
    product = models.CharField(max_length=100, blank=True, verbose_name='Product')
    variety = models.CharField(max_length=100, blank=True, verbose_name='Variety')
    color = models.IntegerField(default=None, blank=True, null=True, verbose_name='Color')
    text = models.CharField(max_length=200, blank=True, verbose_name='Text')
    underside = models.CharField(max_length=50, blank=True, verbose_name='Underside')

Ответы [ 2 ]

0 голосов
/ 21 апреля 2019

Для удаления всех ваших данных или просто из приложения в psql необходимо сделать это в хронологическом порядке:

Сначала удалите своих миграционных файлов из папки приложения (app / migrations).

Тогда:

Удалить БД в PSQL:

  # DROP DATABASE dbname;

Создать базу данных в psql:

  # CREATE DATABASE dbname;

Снова выполнить миграцию:

  manage.py make migrations (appname)

Затем мигрируйте:

 manage.py migrate (appname)
0 голосов
/ 21 апреля 2019

Предполагая, что вы хотите начать все заново, и вас не беспокоят предыдущие данные. Создайте суперпользователя после удаления db.sqlite3 и всех миграций, кроме init .py. Не удаляйте init .py.

  1. Удалить миграции и db.sqlite3

  2. запустить makemigrations

  3. выполнить миграцию

  4. создать суперпользователя

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...