#django #django-models #django-south
#django #django-модели #django-юг
Вопрос:
Я создаю приложение с использованием django и использую django-south для миграции схемы базы данных. Я использую django-mptt для создания системы комментариев, и я установил 0.5-pre (текущую главную ветку git).
В версии, которую я использую, есть вызываемое поле django TreeForeignKey
, но я пытаюсь проверить, есть ли в версии 0.5 ошибка, которая существует в версии 0.4, поэтому я удалил свою версию django-mptt и установил текущую версию из cheeseshop. Я изменил свой код, чтобы использовать ForeignKey
, а не TreeForeignKey
.
Когда приходит время выполнять миграции, это, очевидно, прерывается этим сообщением:
ValueError: Cannot import the required field 'mptt.fields.TreeForeignKey'
Все мои файлы миграции ссылаются mptt.fields.TreeForeignKey
на то, что не существует в django-mptt 0.4.
Моя Comment
модель в django-mptt 0.5:
from mptt.models import MPTTModel
from mptt.fields import TreeForeignKey
class Comment(MPTTModel):
# ...
parent = TreeForeignKey('self', related_name='children', blank=True, null=True)
Та же модель после того, как я понизил до django-mptt 0.4
import django.db.models
from mptt.models import MPTTModel
class Comment(MPTTModel):
# ... cruft
# TreeForeignKey does not exist in mptt 0.5!
parent = models.ForeignKey('self', related_name='children', blank=True, null=True)
Есть два довольно хитрых подхода, которые я придумал, чтобы исправить это и позволить миграции работать:
- Добавьте
TreeForeignKey
класс в мою установку django-mptt. - Измените мои файлы миграции, чтобы удалить ссылки на
mptt.fields.TreeForeignKey
.
Я выбрал первый подход, и он сработал, но я чувствую, что это своего рода взлом (но не так сильно, как второй вариант).
Есть ли нехакерный способ сделать то, что я сделал с понижением уровня зависимостей, что привело к изменению некоторых полей в моих моделях?
Ответ №1:
Это действительно не имеет никакого отношения к Югу. fields
модуль django-mptt не существовал до версии 0.5.pre. Итак, когда вы понизили рейтинг до 0.4, теперь вы по праву получаете ImportError.
Я не могу сказать вам, какой правильный импорт использовать, потому что я не использую 0.4, и по какой-то сумасшедшей причине разработчики не поддерживали документы 0.4. Однако ваш второй подход кажется наиболее подходящим. Не должно быть никаких причин, по которым вам действительно нужно использовать TreeForeignKey при миграции. Это просто оболочка вокруг стандартного внешнего ключа.
Комментарии:
1. Да, южная часть была немного ортогональной, но поскольку мои модели изменились, и миграции прервались из-за отсутствия материала, все ломалось. Хотя мой маленький эксперимент также не был связан с изменением версии, поэтому я вернулся к django-mptt github-master версии. Спасибо!
2. Возникла та же проблема, и ее решили с помощью второго подхода: заменили все вхождения mptt.fields. TreeForeignKey для django.db.models. поля.связанные. ForeignKey.