2014-11-30 5 views
0

Я читаю этот урок, чтобы изучить основы django, и я столкнулся с проблемой, которую я не могу решить.Slugfield в танго с django

Я на этой странице http://www.tangowithdjango.com/book17/chapters/models_templates.html при подходе функции sluglify.

В учебнике автор говорит, что мы должны создать новую строку в нашей модели категорий для slugfield. Я Folow строго все шаги, так же, как я показываю здесь:

from django.db import models 
from django.template.defaultfilters import slugify 

class Category(models.Model): 
    name = models.CharField(max_length=128, unique=True) 
    likes = models.IntegerField(default=0) 
    views = models.IntegerField(default=0) 
    slug = models.SlugField(unique=True) 

    def __unicode__(self): 
     return self.name 

class Page(models.Model): 
    category = models.ForeignKey(Category) 
    title = models.CharField(max_length=128) 
    url = models.URLField() 
    views = models.IntegerField(default=0) 


    def __unicode__(self): 
     return self.title 

Когда я управляю «makemgiration» команда все работает, как ожидалось: Я выбираю первый вариант и обеспечить «». НО когда я бегу «мигрировать» я получаю: ошибка

django.db.utils.Integrity: колонка Slug не является уникальным

Что здесь происходит? Я неоднократно повторял миграцию и пробовал другие коды по умолчанию, но с тем же окончанием. Я не могу понять, что я делаю неправильно. Они оставили только то, что я даю что-то другое вместо «» (Во-первых, я thoughtthey были «» или «).

Спасибо за ваше время и помощь!

ответ

2

Удалить db.sqlite3 и повторно запустить

python manage.py syncdb 

Затем выполнить миграцию

python manage.py makemigrations rango 
python manage.py migrate 

и повторно запустить сценарий населения. Это недостаток Django в том, что всякий раз, когда вы меняете models.py, db необходимо воссоздать.

0

Я также собираюсь через учебник и У меня была такая же проблема пару дней назад.

Я считаю, что проблема в том, что вы пытаетесь добавить новое поле (slug) и быть уникальным для каждого из элементов в своей таблице, но если я не ошибаюсь, у вас уже есть некоторые данные в вашей таблице, для которых это значение не существует, и поэтому значение, которое это поле будет получать для этих строк, не является уникальным, поэтому «ошибка django.db.utils.Integrity: столбец Slug не уникален "

То, что я сделал, это просто удалить данные в таблице (потому что это было всего лишь несколько полей, поэтому ничего особенного), и THEN выполняют добавление поля к модели. После этого вы можете поместить данные обратно в таблицу (если вы следуете руководству, у вас должен быть скрипт для автоматической группировки таблиц, поэтому вы просто запускаете этот скрипт, а вы - золотой). После того, как вы это сделали, все строки в таблице должны иметь уникальное поле slug (поскольку оно автоматически создается на основе названия категории), и это решает проблему.

Обратите внимание, что если ваша таблица очень большая, это может быть не очень хорошим решением из-за удаления данных, поэтому, возможно, есть лучший способ, например добавление этого поля в модель без его уникальности, а затем запуск скрипт, который задает поле slug для каждой строки уникальному значению, а затем задает поле модели как уникальное, но я не очень хорошо разбираюсь в SQL, и первое решение работает отлично для меня, поэтому оно должно работать и на вас.

+0

Благодарим за помощь! Я попробую позже, чтобы увидеть, что удаление данных что-то изменит. Я уже пытался добавить поле без уникальности, но я не знаю, почему это не делается. Если миграция является, например, 0016, она пытается применить отношение к уникальному приложению в моем случае 0006) .... Заключение: та же ошибка althouht, что у нее нет уникального поля. – XcodeX

-2

попробуйте удалить файл sqlite3.db из каталога проекта. я был застрял в аналогичной проблеме, и это действительно работает. Кроме того, даже если вы изменяете свой демографический скрипт, вам нужно удалить и обновить файл db, чтобы увидеть внесенные изменения ....

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