Пользовательская миграция на юг с пользовательскими полями - Django - PullRequest
0 голосов
/ 17 августа 2011

Я довольно новичок в Django и только что получил работу, которая включает в себя поддержку и добавление функций на сайт, который я не проектировал, поэтому я все еще немного сбит с толку структурой и особенностями проекта.Сайт использует South для миграции баз данных, и я привык использовать его для добавления новых приложений в проект.Проблема, с которой я столкнулся сейчас, заключается в том, что мне нужно удалить определенное поле в модели, потому что оно больше не нужно, и на странице администратора его необходимо заполнить.Из моего понимания Django до сих пор это кажется настраиваемым полем.Это определяется как это в своем отдельном приложении библиотеки (все еще не уверен, что это правильный язык).

class Genre(models.Model):
    name = models.CharField(max_length=255)
    def __unicode__(self):
        return u"%s" % self.name

Вот модели, которые используют настраиваемое поле, если это помогает.

class Entry(models.Model):
    artist = d51fields.ForeignKey(Artist, instantiate_fn=instant_artist)
    album = d51fields.ForeignKey(Album, js_methods=['match_artist_and_startswith'], instantiate_fn=instant_album)
    track = d51fields.ForeignKey(Track, js_methods=['match_album_and_startswith'], instantiate_fn=instant_track)
    genre = models.ForeignKey(Genre)
    submitted = models.DateTimeField(auto_now_add=True)
    is_rotation = models.BooleanField()
    dj = models.ForeignKey(DJ)
    show = models.ForeignKey(Show, null=True, blank=True)
    objects = EntryManager()
    def __unicode__(self):
        return "%s [%s]" % (self.artist, self.track)
    class Meta:
        verbose_name = "entry"
        verbose_name_plural = "entries"

Я посмотрел документацию по переносу настраиваемых полей, но все это действительно сбивает с толкудля меня, поэтому я ищу еще помощь.Я просто хочу избавиться от таблицы, содержащей поле Genre, и очистить зависимости с помощью внешних ключей, связанных с ним.Как вы думаете, я должен написать некоторые пользовательские правила для South и использовать миграцию или просто попробовать сделать это вручную в Postgresql.Я попытался сделать это только с Postgres, и я с треском провалился.

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

Также, если кто-то знает, как получить хорошее представление о структуре базы данных, это было бы здорово.

Большое спасибо.Все вы, ребята, великолепны.

Edit1

Вот что я получил, когда убрал ForeignKeys и затем запустил

manage.py schemamigration logs --auto

 ! Cannot freeze field 'logs.entry.artist'
 ! (this field has class d51_admin_autofk.fields.ForeignKey)
 ! Cannot freeze field 'logs.entry.album'
 ! (this field has class d51_admin_autofk.fields.ForeignKey)
 ! Cannot freeze field 'logs.entry.track'
 ! (this field has class d51_admin_autofk.fields.ForeignKey)

 ! 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).

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

1 Ответ

1 голос
/ 17 августа 2011

Я не вижу ни одного настраиваемого поля в коде, который вы разместили.Я вижу только две модели, все из которых содержат стандартные поля, поставляемые с Django.

Если я правильно понимаю, вы можете просто удалить все ForeignKey ссылки на вашу Genre модель.Затем запустите ./manage.py schemamigration <yourappname> --auto.Вам будет предложено ввести значение по умолчанию для поля genre в модели Entry, укажите какой-либо идентификатор.(Это связано с тем, что миграции можно применять как в прямом, так и в обратном направлении, поэтому, если вы попытаетесь отменить миграцию, это значение будет вставлено во все экземпляры модели.)

Наконец, простое применение миграции должночтобы это произошло: ./manage.py migrate <yourappname>.

После этого вы можете безопасно сбросить таблицу, хранящую вашу модель Genre.

Обязательно попробуйте это на сервере разработки, просто чтобыубедитесь, что он не взорвется.(-;

...