Джанго-Ив и Юг

Я начинаю новый проект django и, как обычно, ставлю юг на свои установленные приложения.

Затем мне нужен какой-то eav для хранения некоторых полей в модели, и я нашел приложение, которое делает именно то, что я хочу, то есть django-eav ( https://github.com/mvpdev/django-eav )

Но теперь я столкнулся с проблемой, потому что юг жалуется, что не знает, как работать с django-eav.

! Cannot freeze field 'eav.attribute.slug'
! (this field has class eav.fields.EavSlugField)
! Cannot freeze field 'eav.attribute.datatype'
! (this field has class eav.fields.EavDatatypeField)

! South cannot introspect some fields; this is probably because they are custom
! fields. If they worked in 0.6 or below, this is because we have removed the
! models parser (it often broke things).
! To fix this, read http://south.aeracode.org/wiki/MyFieldsDontWork

Я читаю это http://south.aeracode.org/docs/customfields.html и я пытаюсь решить эту проблему, не отказываясь ни от одного из двух проектов.

Кто-нибудь может мне помочь? Спасибо


person balsagoth    schedule 15.09.2011    source источник


Ответы (3)


Лучший ответ, который я нашел, был на http://south.aeracode.org/docs/settings.html#setting-south-migration-modules

Предлагается добавить словарь SOUTH_MIGRATION_MODULES в settings.py и сопоставить это приложение с несуществующим модулем.

SOUTH_MIGRATION_MODULES = {
    'eav': 'ignore',
}
person Marcel Chastain    schedule 14.04.2012
comment
Возможно, это лучшее решение. - person balsagoth; 14.04.2012

Глядя на github, кажется, что django-eav не очень активно разрабатывается. Если он работает так, как вы хотите, и вы не ожидаете изменения его модели данных, вам не нужно применять к нему South. Юг отлично работает, управляя некоторыми приложениями, но не управляя другими.

Обязательно используйте South в приложениях, которые вы создаете и модифицируете. А вот за стабильную библиотеку я редко заморачиваюсь.

person Leopd    schedule 15.09.2011
comment
Но eav тесно связан с моей моделью. - person balsagoth; 15.09.2011
comment
Он отделен через GenericForeignKey. Пока первичные ключи и имена ваших моделей не меняются, вам не о чем беспокоиться. Вы можете добавлять и удалять поля в своих моделях по своему усмотрению. Если вы переименовываете свои модели или меняете PK в своих собственных моделях, вам придется выполнить причудливую миграцию данных, включающую таблицы EAV. Все еще возможно без Юга, управляющего приложением eav, но сложно. Было бы сложно с югом управлять EAV. - person Leopd; 15.09.2011
comment
Да, я согласен с тобой. я не добавлял eav и другие сторонние приложения. Спасибо вам за ваши предложения - person balsagoth; 16.09.2011

Я думаю, что нашел одно возможное решение.

http://south.aeracode.org/docs/customfields.html#field-name-patterns

Рядом с моей моделью я поставил это:

from south.modelsinspector import add_ignored_fields
add_ignored_fields(["^eav\.fields\.EavDatatypeField"])
add_ignored_fields(["^eav\.fields\.EavSlugField"])

теперь это работает.

person balsagoth    schedule 16.09.2011