django-south - правильный способ понижения зависимостей? - PullRequest
2 голосов
/ 24 октября 2011

Я создаю приложение, используя django, и использую django-south для миграций схемы базы данных. Я использую django-mptt для построения системы комментариев, и я установил 0.5-pre (текущая ветка git master).

Используемая версия имеет поле 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) 

Я предложил два довольно хакерских подхода, чтобы исправить это и разрешить миграцию работать:

  1. Добавьте класс TreeForeignKey в мою установку django-mptt.
  2. Измените мои файлы миграции, чтобы удалить ссылки на mptt.fields.TreeForeignKey.

Я выбрал первый подход, и он сработал, но я чувствую, что это что-то вроде взлома (но не настолько, как второй вариант).

Есть ли нехакерский способ сделать то, что я сделал, с понижением зависимостей, которое привело к изменению некоторых полей в моих моделях?

1 Ответ

2 голосов
/ 24 октября 2011

Это действительно не имеет ничего общего с Югом. fields модуль django-mptt не существовал до 0.5.pre. Поэтому, когда вы понизили версию до 0,4, теперь вы правильно получаете ошибку ImportError.

Я не могу сказать вам, какой правильный импорт использовать, потому что я не использую 0.4, и по какой-то сумасшедшей причине разработчики не поддерживали 0.4 документации. Тем не менее, ваш второй подход кажется наиболее подходящим. Не должно быть никаких причин, по которым вам нужно использовать TreeForeignKey при миграции. Это просто обертка вокруг стандартного ForeignKey.

...