Django - MigrationError после добавления нового поля в существующую модель и mongoDb - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть MigrationError, когда представление django выполняет функцию get объекта модели user_profile = UserProfile.objects.get(user=request.user)

, как показано ниже:

HTTP GET /media/website/bg_chat.PNG 200 [0.22, 127.0.0.1:1417]
Internal Server Error: /chat/French
Traceback (most recent call last):
  File "C:\Users\Ahmed\Desktop\MS_ ISI\PA\Mini_Projet\ISI_Chat\venv\lib\site-packages\djongo\sql2mongo\query.py", line 287, in _align_results
    ret.append(doc[selected.column])
KeyError: 'numberOfBan'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\Ahmed\Desktop\MS_ ISI\PA\Mini_Projet\ISI_Chat\venv\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\Users\Ahmed\Desktop\MS_ ISI\PA\Mini_Projet\ISI_Chat\venv\lib\site-packages\django\core\handlers\base.py", line 126, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Users\Ahmed\Desktop\MS_ ISI\PA\Mini_Projet\ISI_Chat\venv\lib\site-packages\django\core\handlers\base.py", line 124, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\Ahmed\Desktop\MS_ ISI\PA\Mini_Projet\ISI_Chat\venv\lib\site-packages\django\contrib\auth\decorators.py", line 21, in _wrapped_view
    return view_func(request, *args, **kwargs)
  File "C:\Users\Ahmed\Desktop\MS_ ISI\PA\Mini_Projet\ISI_Chat\chat\views.py", line 32, in chatroom
    uprofile = UserProfil.objects.get(user=user)
  File "C:\Users\Ahmed\Desktop\MS_ ISI\PA\Mini_Projet\ISI_Chat\venv\lib\site-packages\django\db\models\manager.py", line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "C:\Users\Ahmed\Desktop\MS_ ISI\PA\Mini_Projet\ISI_Chat\venv\lib\site-packages\django\db\models\query.py", line 393, in get
    num = len(clone)
  File "C:\Users\Ahmed\Desktop\MS_ ISI\PA\Mini_Projet\ISI_Chat\venv\lib\site-packages\django\db\models\query.py", line 250, in __len__
    self._fetch_all()
  File "C:\Users\Ahmed\Desktop\MS_ ISI\PA\Mini_Projet\ISI_Chat\venv\lib\site-packages\django\db\models\query.py", line 1186, in _fetch_all
    self._result_cache = list(self._iterable_class(self))
  File "C:\Users\Ahmed\Desktop\MS_ ISI\PA\Mini_Projet\ISI_Chat\venv\lib\site-packages\django\db\models\query.py", line 63, in __iter__
    for row in compiler.results_iter(results):
  File "C:\Users\Ahmed\Desktop\MS_ ISI\PA\Mini_Projet\ISI_Chat\venv\lib\site-packages\django\db\models\sql\compiler.py", line 1005, in apply_converters
    for row in map(list, rows):
  File "C:\Users\Ahmed\Desktop\MS_ ISI\PA\Mini_Projet\ISI_Chat\venv\lib\site-packages\django\db\models\sql\compiler.py", line 1466, in cursor_iter
    for rows in iter((lambda: cursor.fetchmany(itersize)), sentinel):
  File "C:\Users\Ahmed\Desktop\MS_ ISI\PA\Mini_Projet\ISI_Chat\venv\lib\site-packages\django\db\models\sql\compiler.py", line 1466, in <lambda>
    for rows in iter((lambda: cursor.fetchmany(itersize)), sentinel):
  File "C:\Users\Ahmed\Desktop\MS_ ISI\PA\Mini_Projet\ISI_Chat\venv\lib\site-packages\django\db\utils.py", line 96, in inner
    return func(*args, **kwargs)
  File "C:\Users\Ahmed\Desktop\MS_ ISI\PA\Mini_Projet\ISI_Chat\venv\lib\site-packages\djongo\cursor.py", line 59, in fetchmany
    ret.append(self.result.next())
  File "C:\Users\Ahmed\Desktop\MS_ ISI\PA\Mini_Projet\ISI_Chat\venv\lib\site-packages\djongo\sql2mongo\query.py", line 719, in __next__
    return next(self._result_generator)
  File "C:\Users\Ahmed\Desktop\MS_ ISI\PA\Mini_Projet\ISI_Chat\venv\lib\site-packages\djongo\sql2mongo\query.py", line 725, in __iter__
    yield from iter(self._query)
  File "C:\Users\Ahmed\Desktop\MS_ ISI\PA\Mini_Projet\ISI_Chat\venv\lib\site-packages\djongo\sql2mongo\query.py", line 180, in __iter__
    yield self._align_results(doc)
  File "C:\Users\Ahmed\Desktop\MS_ ISI\PA\Mini_Projet\ISI_Chat\venv\lib\site-packages\djongo\sql2mongo\query.py", line 290, in _align_results
    raise MigrationError(selected.column)
djongo.sql2mongo.MigrationError: numberOfBan

И модель UserProfile:

class UserProfile(models.Model):
    SEXE = (
        ('M', 'Male'),
        ('F', 'Female')
    )
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    DateBirth = models.DateTimeField(blank=True, null=True)
    photo = models.ImageField(upload_to=UploadTo)
    gender = models.CharField(max_length=10, choices=SEXE)
    #New fields
    numberOfBan = models.IntegerField(blank=True, null=True)
    lastBan = models.DateTimeField(blank=True, null=True)

    def __str__(self):
        return self.user.username

TO KNOW:

  • Сначала я использовал базу данных по умолчанию sqLite, а затем переключаюсь на базу данных noSQL mongoDB и все работает нормально.

  • после того, как я добавил какое-то поле в модель userProfile, я запустил команды миграции и также работал нормально.

  • Я проверил коллекцию базы данных, и у нее есть поле 'lastBan'как и ожидалось, и 'int32' вместо 'numberOfBan' в одном документе, а в другом нет новых полей вообще!

  • И когда я добавляю новый userprofile, он имеет два поля вдокумент, но с той же проблемой исключения.

Любая идея, пожалуйста ??

...