170 похожих чатов

#Вопрос У меня в проекте полтора десятка приложений. Одно меня что-то

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

drop table tmplts_arbitraryhtml, tmplts_branchtmplt, tmplts_semanticslevel2tmplt, tmplts_specialbranchtmplt, tmplts_specialsemanticslevel2tmplt;

Получил: ERROR: cannot drop desired object(s) because other objects depend on them
DETAIL: constraint dashboard_branchsema_semantics_tmplt_id_d4aa19f9_fk_tmplts_sp on table dashboard_branchsemanticstemplate depends on table tmplts_specialsemanticslevel2tmplt

HINT: Use DROP ... CASCADE to drop the dependent objects too.

В общем, дропнул я их каскадно, как тут сказано.

Теперь, когда делаю python manage.py makemigrations, получаю:

The field dashboard.BranchSemanticsTemplate.semantics_tmplt was declared with a lazy reference to 'tmplts.specialsemanticslevel2tmplt', but app 'tmplts' isn't installed.


Скажите, пожалуйста, что как надо было правильно дропнуть миграции и создать их заново? Я просто достану все из гита и дропну заново. Мне бы просто на будущее понимать что-то про миграции. А то я с ними вечно куда-то влипаю.

31 ответов

20 просмотров

Снеси базу, снеси миграции, в парке миграций создай инит, сделай новые

Nonverbis- Автор вопроса

Это хорошо для игрушечного проекта. А для боевого проекта снести миграции - что-то как-то не хочется. У меня проект учебный, правда. Но я учусь для боевых условий, а не для поиграться. В боевых условиях разве можно снести все миграции?

Так ты спросил как миграции снести

Nonverbis- Автор вопроса

Нет. Я не так спросил. Я спросил: как правильно их снести. А просто снести - ну, тут много ума не надо.

Твое понимание "правильного сноса" не явно

Nonverbis- Автор вопроса

Мои действия привели к ошибке. Значит, я действовал неверно. Видимо, должен быть путь, чтобы ошибка не появлялась, а миграции были снесены для данного конкретного приложения. Вот как правильно их сносить для приложения.

Что ты подразумеваешь под "сносом миграций"?

Nonverbis- Автор вопроса

Удалить миграции полностью для данного приложения. И потом заново их создать скриптом.

Ну удалить ты можешь просто их из папки, а вот создать их просто так не получится

Nonverbis- Автор вопроса

Просто удалить миграции в боевом проекте? И это правильно? Так получается, что миграции вообще не нужны что-ли? Ну, а иначе как их так можно просто удалить?

В боевом проекте никогда не удаляют миграции

Nonverbis- Автор вопроса

Ну, а зачем тогда это предлагать?

Nonverbis- Автор вопроса

да, я спросил. но не надо вот вредных-то советов давать.

Сам ты вредный

Нужно было откатывать миграции средствами джанго, а не через PG. Когда миграции откатили, ее файл в папке можно удалить. Сейчас беда в том, что боевую базу ты уже попортил, надо смотреть что именно.

Nonverbis- Автор вопроса

Вот так? ./manage.py migrate my_app 0010_previous_migration

Поэтому надо с копиями базы играться

можно просто ./manage.py migrate my_app 0010

Nonverbis- Автор вопроса

Что-то я думаю,не поможет это. Потому что другие приложения зависят от этого. До какой же миграции откатывать. До инит что-ли? Ну, а инит-то останется. Как же чиститься?

А зачем вообще откатываться?

Nonverbis- Автор вопроса

Да я постоянно что-то делаю не так. Потом чищусь. Может, я неправ.

Ну смотри, на стадии разработки я часто всю дропаю и есть скрипт для автозаполнения базы из фиксур. На проде только новые миграции и они также могут откатывать состояния в прошлые миграции.

Nonverbis- Автор вопроса

Во, в доке есть такое: python manage.py migrate books zero Может, мне его как раз использовать.

Миграции на продакшене это история изменений базы данных, историю чистить не нужно. Удалять миграции это моветон, особенно если над проектом больше одного челвоека работает.

Nonverbis- Автор вопроса

А как надо делать? Вот я развернул проект в среде разработки. Долго дергал модель. И счел ее удовлетворительной. Но я накопил десяток миграций. Правильно было засечь последнюю миграцию, откатить до нее. Сделать makemigrations. И потом только одну дополнительную миграцию уже в прод передавать. Так?

Иногда делаю также, иногда делаю squashmigrations

Nonverbis- Автор вопроса

А проблем не может возникнуть? Просто есть фреймворки, в которых даже слышать не хотят про миграции, сделанные скриптом. Считают, что это самоп по себе небезопасно. А тут еще утрамбованные потм сверху неизвестно как.

Миграции утрамбовываются известно как. Мы же доверяем джанго, значит и squashmigrations работает верно. Про небезопасность, честно говоря, первый раз слышу. Но я не еще не мастер.

Nonverbis- Автор вопроса

Почему тогда у Спринга - да и не только у него - нет механизма для автоматического создания миграций. А там такие таблицы бешеные. Там джанго отдыхает. Вместе со своими чахлыми задачами, даже если это магазин какой. А нет - нельзя скриптом. Пиши ручками. И если заикнешься об автоматизации, сразу леща в ухо схлопочешь.

ну кто тебе запрещает? пиши на spring 10 тысяч строк кода, вместо полтинника на джанге

Похожие вопросы

Обсуждают сегодня

а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Эх кто-то пришел и весь праздник испортил :( You need complex FBX scene importing setup to change things on import? good luck with that. You need navigation and pathfinding? g...
Serg Gini
5
Какого хера? /Sources/App/Modules/User/Models/UserLinkApple.swift:21:20: warning: stored property '_id' of 'Sendable'-conforming class 'UserLinkApple' is mutable @ID(...
Alexander Sherbakov
14
Всем привет! Подскажите. Я написал приложение на Delphi 10.2 Tokyo под Windows 10. И передо мной стал вопрос о том чтобы сделать это приложение кроссплатформенным (под Linux и...
Дмитрий Завгородний
24
Привет всем. Подскажите где можно посмотреть, какая версия электрон, поддерживает версии windows? Некий changelog. Мне бы желательно, поддержку 7,8,10... latest, как понимаю и...
Anonym Squad
21
Почему стало ломаться на D11? "739002.86400000' is not a valid timestamp" function IncDateTime(aStamp:TTimeStamp;aKind:TTriggerKind;aInterval:Integer):TDateTime; //aStamp = 2...
Катерина Свиридова
8
У тебя в конфиге нигде нет deny all; или вообще любого deny?
Alexander Sherbakov
10
Портфолио: Зовут меня Александр, мне 36 лет. Город Пушкино. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github....
Magic
10
Ребят, чет я уже не догоняю... Крч в коде на асм там происходит нечто вроде a+число (a+1, a+2 и т.д.). Но почему строка lea ecx, [edx+1] работает как a+1?? В edx берется адрес...
Alan 🔝 Бэброу
4
думаешь я не смогу также сделать? мне это просто не удобно
int 💳 𝙖𝙞𝙧 𝙗𝙞𝙜 𝙗𝙤𝙗 🔫 check bio / spam block / AFK / nohello.com / GMT+3
9
Карта сайта