Используя Django 2.2 с PostgreSQL, я хотел что-то протестировать, имея следующую модель в приложении с именем main:
class Product(models.Model):
....
Файл миграции для этого этапа: 0004 _...
Я сделал коммит текущей ситуации в ветке master.Затем создал новую ветвь с именем extra_migrations и проверил ее.
В новой ветке я добавил произвольное поле в модель продукта:
class Product(models.Model):
....
some_field = models.CharField(max_length=128, blank=True, null=True)
Затем я выполнил миграцию для этого изменения иприменил миграции.
Файл миграции для этого этапа: 0005 _...
Затем я зарегистрировался в главной ветви и сделал:
python manage.py migrate main 0004_..
(вернутьобратно в состояние, с которого я начал в начале этого вопроса)
Джанго говорит мне No migrations to apply
, но в админке Django я больше не вижу some_field
.Поэтому я подумал, что, может быть, VSCode творит здесь какое-то волшебство, хаха.
Это приводит к вопросу 1: почему Django говорит мне, что миграции не применяются, а есть?
После удаления ветки extra_migrations
я решил проверить базу данных в pgadmin, и там я все еще вижу состояние миграций 0005.
Поэтому я подумал, что я умен и вернулся к миграции0003, и повторно применен 0004.
Но pgadmin (после обновления) по-прежнему показывает состояние 0005 (отображается столбец some_field
), когда я возвращаюсь к миграциям 0003 или 0004.
вопрос 2: У кого-нибудь есть идеи, почему pgadmin не отражает изменения?
База данных, похоже, меняется.Потому что, когда я возвращаюсь к миграциям 0003, открывая подробное представление объекта модели Product, я получаю следующую ошибку.Возвращение к 0004 решает эту проблему.
ProgrammingError at /admin/main/product/2/change/
relation "main_product_tags" does not exist
LINE 1: ...cttag"."active" FROM "main_producttag" INNER JOIN "main_prod...
^
Request Method: GET
Request URL: http://127.0.0.1:8000/admin/main/product/2/change/
Django Version: 2.2.2
Exception Type: ProgrammingError
Exception Value:
relation "main_product_tags" does not exist
LINE 1: ...cttag"."active" FROM "main_producttag" INNER JOIN "main_prod...
^
Exception Location: /home/riksch/.local/share/virtualenvs/booktime-2882sU_9/lib/python3.7/site-packages/django/db/backends/utils.py in _execute, line 84
Python Executable: /home/riksch/.local/share/virtualenvs/booktime-2882sU_9/bin/python
Python Version: 3.7.3
Python Path:
['/home/riksch/projects/booktime',
'/home/riksch/.local/share/virtualenvs/booktime-2882sU_9/lib/python37.zip',
'/home/riksch/.local/share/virtualenvs/booktime-2882sU_9/lib/python3.7',
'/home/riksch/.local/share/virtualenvs/booktime-2882sU_9/lib/python3.7/lib-dynload',
'/usr/lib/python3.7',
'/home/riksch/.local/share/virtualenvs/booktime-2882sU_9/lib/python3.7/site-packages']
Server time: Sun, 16 Jun 2019 14:53:48 +0200
Traceback Switch to copy-and-paste view
/home/riksch/.local/share/virtualenvs/booktime-2882sU_9/lib/python3.7/site-packages/django/db/backends/utils.py in _execute
return self.cursor.execute(sql, params)
…
▶ Local vars
The above exception (relation "main_product_tags" does not exist LINE 1: ...cttag"."active" FROM "main_producttag" INNER JOIN "main_prod... ^ ) was the direct cause of the following exception:
/home/riksch/.local/share/virtualenvs/booktime-2882sU_9/lib/python3.7/site-packages/django/core/handlers/exception.py in inner
response = get_response(request)
…
▶ Local vars
/home/riksch/.local/share/virtualenvs/booktime-2882sU_9/lib/python3.7/site-packages/django/core/handlers/base.py in _get_response
response = self.process_exception_by_middleware(e, request)
…
▶ Local vars
/home/riksch/.local/share/virtualenvs/booktime-2882sU_9/lib/python3.7/site-packages/django/core/handlers/base.py in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
…
▶ Local vars
/home/riksch/.local/share/virtualenvs/booktime-2882sU_9/lib/python3.7/site-packages/django/contrib/admin/options.py in wrapper
return self.admin_site.admin_view(view)(*args, **kwargs)
…
▶ Local vars
/home/riksch/.local/share/virtualenvs/booktime-2882sU_9/lib/python3.7/site-packages/django/utils/decorators.py in _wrapped_view
response = view_func(request, *args, **kwargs)
…
▶ Local vars
/home/riksch/.local/share/virtualenvs/booktime-2882sU_9/lib/python3.7/site-packages/django/views/decorators/cache.py in _wrapped_view_func
response = view_func(request, *args, **kwargs)
…
▶ Local vars
/home/riksch/.local/share/virtualenvs/booktime-2882sU_9/lib/python3.7/site-packages/django/contrib/admin/sites.py in inner
return view(request, *args, **kwargs)
…
▶ Local vars
/home/riksch/.local/share/virtualenvs/booktime-2882sU_9/lib/python3.7/site-packages/django/contrib/admin/options.py in change_view
return self.changeform_view(request, object_id, form_url, extra_context)
…
▶ Local vars
/home/riksch/.local/share/virtualenvs/booktime-2882sU_9/lib/python3.7/site-packages/django/utils/decorators.py in _wrapper
return bound_method(*args, **kwargs)
…
▶ Local vars
/home/riksch/.local/share/virtualenvs/booktime-2882sU_9/lib/python3.7/site-packages/django/utils/decorators.py in _wrapped_view
response = view_func(request, *args, **kwargs)
…
▶ Local vars
/home/riksch/.local/share/virtualenvs/booktime-2882sU_9/lib/python3.7/site-packages/django/contrib/admin/options.py in changeform_view
return self._changeform_view(request, object_id, form_url, extra_context)
…
▶ Local vars
/home/riksch/.local/share/virtualenvs/booktime-2882sU_9/lib/python3.7/site-packages/django/contrib/admin/options.py in _changeform_view
form = ModelForm(instance=obj)
…
▶ Local vars
/home/riksch/.local/share/virtualenvs/booktime-2882sU_9/lib/python3.7/site-packages/django/forms/models.py in __init__
object_data = model_to_dict(instance, opts.fields, opts.exclude)
…
▶ Local vars
/home/riksch/.local/share/virtualenvs/booktime-2882sU_9/lib/python3.7/site-packages/django/forms/models.py in model_to_dict
data[f.name] = f.value_from_object(instance)
…
▶ Local vars
/home/riksch/.local/share/virtualenvs/booktime-2882sU_9/lib/python3.7/site-packages/django/db/models/fields/related.py in value_from_object
return [] if obj.pk is None else list(getattr(obj, self.attname).all())
…
▶ Local vars
/home/riksch/.local/share/virtualenvs/booktime-2882sU_9/lib/python3.7/site-packages/django/db/models/query.py in __iter__
self._fetch_all()
…
▶ Local vars
/home/riksch/.local/share/virtualenvs/booktime-2882sU_9/lib/python3.7/site-packages/django/db/models/query.py in _fetch_all
self._result_cache = list(self._iterable_class(self))
…
▶ Local vars
/home/riksch/.local/share/virtualenvs/booktime-2882sU_9/lib/python3.7/site-packages/django/db/models/query.py in __iter__
results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
…
▶ Local vars
/home/riksch/.local/share/virtualenvs/booktime-2882sU_9/lib/python3.7/site-packages/django/db/models/sql/compiler.py in execute_sql
cursor.execute(sql, params)
…
▶ Local vars
/home/riksch/.local/share/virtualenvs/booktime-2882sU_9/lib/python3.7/site-packages/django/db/backends/utils.py in execute
return super().execute(sql, params)
…
▶ Local vars
/home/riksch/.local/share/virtualenvs/booktime-2882sU_9/lib/python3.7/site-packages/django/db/backends/utils.py in execute
return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
…
▶ Local vars
/home/riksch/.local/share/virtualenvs/booktime-2882sU_9/lib/python3.7/site-packages/django/db/backends/utils.py in _execute_with_wrappers
return executor(sql, params, many, context)
…
▶ Local vars
/home/riksch/.local/share/virtualenvs/booktime-2882sU_9/lib/python3.7/site-packages/django/db/backends/utils.py in _execute
return self.cursor.execute(sql, params)
…
▶ Local vars
/home/riksch/.local/share/virtualenvs/booktime-2882sU_9/lib/python3.7/site-packages/django/db/utils.py in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
…
▶ Local vars
/home/riksch/.local/share/virtualenvs/booktime-2882sU_9/lib/python3.7/site-packages/django/db/backends/utils.py in _execute
return self.cursor.execute(sql, params)
…
▶ Local vars