По причинам, которые лучше не объяснять, я удалил все таблицы и файлы миграции в базе данных для моего личного проекта 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')