2014-11-16 2 views
3

Я хочу поделиться с вами этим случаем:Проблем при добавлении SlugField типа поля (Django 1.6.3)

У меня есть модели Albums, Artists и Tracks

  • ОдинArtist могут иметь многоAlbums
  • ОдинAlbum может иметь многиеTracks
  • МногиеTracks внутри OneAlbum (может быть ManyToMany тоже ..)

В Albums модели Я хочу добавить поле типа SlugField. Это следующее:

from django.db import models 
from artists.models import Artists 

    class Album(models.Model): 
     title = models.CharField(max_length=255) 
     cover = models.ImageField(upload_to='albums') 
     slug = models.SlugField(max_length=100) 
     artist = models.ForeignKey(Artists) 

     def __unicode__(self): 
      return self.title 

я выполнить migratios с юга:

(myvenv)➜ myvenv ./manage.py syncdb 

Syncing... 
Creating tables ... 
Installing custom SQL ... 
Installing indexes ... 
Installed 0 object(s) from 0 fixture(s) 

Synced: 
> django.contrib.admin 
> django.contrib.auth 
> django.contrib.contenttypes 
> django.contrib.sessions 
> django.contrib.messages 
> django.contrib.staticfiles 
> south 
> albums 

Not synced (use migrations): 
- django_extensions 
- djcelery 
- tracks 
- artists 
- userprofiles 
(use ./manage.py migrate to migrate these) 

(myenv)➜ myenv ./manage.py convert_to_south albums 

Creating migrations directory at '/home/bgarcial/workspace/myenv/sfotipy/albums/migrations'... 
Creating __init__.py in '/home/bgarcial/workspace/myenv/sfotipy/albums/migrations'... 
+ Added model albums.Album 
Created 0001_initial.py. You can now apply this migration with: ./manage.py migrate albums 
- Soft matched migration 0001 to 0001_initial. 
Running migrations for albums: 
- Nothing to migrate. 
- Loading initial data for albums. 
Installed 0 object(s) from 0 fixture(s) 

App 'albums' converted. Note that South assumed the application's models matched the database 
(i.e. you haven't changed it since last syncdb); if you have, you should delete the albums/migrations directory, revert models.py so it matches the database, and try again. 

(myenv)➜ myenv ./manage.py migrate albums   

Running migrations for albums: 
- Nothing to migrate. 
- Loading initial data for albums. 
Installed 0 object(s) from 0 fixture(s) 

Если я ввожу команду ./manage.py sqlall, модель альбома уже появляются с полем пробкового в базе данных

(Sfoti.py)➜ sfotipy ./manage.py sqlall albums 
BEGIN; 
CREATE TABLE "albums_album" (
    "id" integer NOT NULL PRIMARY KEY, 
    "title" varchar(255) NOT NULL, 
    "cover" varchar(100) NOT NULL, 
    "slug" varchar(100) NOT NULL, 
    "artist_id" integer NOT NULL REFERENCES "artists_artists" ("id") 
); 
CREATE INDEX "albums_album_f52cfca0" ON "albums_album" ("slug"); 
CREATE INDEX "albums_album_7904f807" ON "albums_album" ("artist_id"); 
COMMIT; 

Но, когда я иду в базу данных, непосредственно в структуру базы данных, Django принести меня, я вижу, что поле пробкового не является эффективным ... Это может подробно их в этом URL https://cldup.com/-F9SQ2D3W8.jpeg

С целью проверки, что этот слизняк работает я создаю URL «альбомы», которые указывают на основе представления AlbumListView класса

from django.conf.urls import patterns, url 
from artists.views import AlbumListView 

urlpatterns = patterns('', 
    url(r'^albums/$', AlbumListView.as_view(), name='album_list'), 
    url(r'^albums/(?P<artist>[\w\-]+)/$', AlbumListView.as_view(), name='album_list'), 
) 

Класс основан вид AlbumListView является следующее: Здесь я определяю QuerySet для выздоровления альбомов из художника и с kwargs переменным является способом, как взять

class AlbumListView(ListView): 
    model = Album 
    template_name = 'album_list.html' 

    def get_queryset(self): 
     if self.kwargs.get('artist'): 
      queryset = self.model.objects.filter(artist__slug=self.kwargs['artist']) 
     else: 
      queryset = super(AlbumListView, self).get_queryset() 
     return queryset 

Когда я иду на просмотр/альбомы в моем браузере, я вижу это сообщение:

no such column: albums_album.slug 

Это изображение ошибки в моем браузере, Проверьте этот адрес, пожалуйста:

enter image description here

Что может быть моей проблемой? Почему миграция не работает? Спасибо за вашу ориентацию :)

ответ

4

Похоже, вы добавили slug модели ПОСЛЕ перспективы syncdb и ДО перспективой convert_to_south.В частности о вашем случае разработчик Юга отображает предупреждающее сообщение в консоли:

Обратите внимание, что Южный предполагаются модель приложения соответствует базе данных (. То есть вы не изменили его с прошлым SyncDB); если у вас есть, , вы должны удалить каталог альбомов/миграций, верните models.py так, чтобы соответствовал базе данных и повторите попытку.

Для фиксации вашей проблемы, вам необходимо:

  • Капля SlugField из альбома (смотрит в вашей консоли выводе вы должны упасть группу тоже)
  • падения папки миграции из альбомов приложения
  • Run. /manage.py convert_to_south альбомы
  • Run ./manage.py мигрирующие альбомы
  • Добавить SlugField
  • Запуск ./manage.py альбомов схемы сопоставления --auto (указать значение по умолчанию как '')
  • Run ./manage.py переместить альбомы
  • Прибыль!
+0

Alex для вашей ориентации. Ваша поддержка была очень полезной – bgarcial

Смежные вопросы