2015-05-14 8 views
4

новичок здесь. Пытается создать приложение, используя Django и Postgres db. Я изо всех сил мигрировать в данный момент получаю эту ошибку «KeyError: („Профили“,„говорить“)»KeyError: ('profiles', 'talk') - Как мне решить?

Вот моя ошибка из моей командной строки после попытки переноса:

(myvenv) Abbys-iMac:talks abbyhumphreys$ python manage.py migrate 
/Users/abbyhumphreys/talks/myvenv/lib/python3.4/site-packages/django/contrib/sites/models.py:78: RemovedInDjango19Warning: Model class django.contrib.sites.models.Site doesn't declare an explicit app_label and either isn't in an application in INSTALLED_APPS or else was imported before its application was loaded. This will no longer be supported in Django 1.9. 
class Site(models.Model): 

System check identified some issues: 

WARNINGS: 
profiles.Profile.user: (fields.W342) Setting unique=True on a ForeignKey has the same effect as using a OneToOneField. 
HINT: ForeignKey(unique=True) is usually better served by a OneToOneField. 
registration.RegistrationProfile.user: (fields.W342) Setting unique=True on a ForeignKey has the same effect as using a OneToOneField. 
HINT: ForeignKey(unique=True) is usually better served by a OneToOneField. 
Operations to perform: 
Synchronize unmigrated apps: staticfiles, registration, humanize, messages 
Apply all migrations: profiles, auth, sessions, admin, contenttypes 
Synchronizing apps without migrations: 
Creating tables... 
    Running deferred SQL... 
    Installing custom SQL... 
Running migrations: 
    Rendering model states...Traceback (most recent call last): 
    File "manage.py", line 10, in <module> 
execute_from_command_line(sys.argv) 
    File "/Users/abbyhumphreys/talks/myvenv/lib/python3.4/site-packages/django/core/management/__init__.py", line 338, in execute_from_command_line 
utility.execute() 
    File "/Users/abbyhumphreys/talks/myvenv/lib/python3.4/site-packages/django/core/management/__init__.py", line 330, in execute 
self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/Users/abbyhumphreys/talks/myvenv/lib/python3.4/site-packages/django/core/management/base.py", line 390, in run_from_argv 
self.execute(*args, **cmd_options) 
    File "/Users/abbyhumphreys/talks/myvenv/lib/python3.4/site-packages/django/core/management/base.py", line 441, in execute 
output = self.handle(*args, **options) 
    File "/Users/abbyhumphreys/talks/myvenv/lib/python3.4/site-packages/django/core/management/commands/migrate.py", line 221, in handle 
executor.migrate(targets, plan, fake=fake, fake_initial=fake_initial) 
    File "/Users/abbyhumphreys/talks/myvenv/lib/python3.4/site-packages/django/db/migrations/executor.py", line 104, in migrate 
state = migration.mutate_state(state, preserve=do_run) 
    File "/Users/abbyhumphreys/talks/myvenv/lib/python3.4/site-packages/django/db/migrations/migration.py", line 83, in mutate_state 
operation.state_forwards(self.app_label, new_state) 
    File "/Users/abbyhumphreys/talks/myvenv/lib/python3.4/site-packages/django/db/migrations/operations/fields.py", line 256, in state_forwards 
for n, f in state.models[app_label, self.model_name_lower].fields 
KeyError: ('profiles', 'talk') 

Вот мой models.py:

from django.contrib.auth.models import User 
from django.db import models 

class Profile(models.Model): 
    name = models.CharField(max_length=255) 
    sname = models.CharField(max_length=255, blank=True, null=True) 
    phone = models.CharField(max_length=255, blank=True, null=True) 
    mobile = models.CharField(max_length=255, blank=True, null=True) 
    email = models.EmailField(max_length=254, blank=True, null=True) 
    address = models.TextField(blank=True, null=True) 
    notes = models.TextField() 
    slug = models.SlugField(unique=True) 
    user = models.ForeignKey(User, unique=True, blank=True, null=True, related_name="users") 

class Talk(models.Model): 
    talk_no = models.CharField(max_length=255, blank=True, null=True) 
    talk_name = models.CharField(max_length=255, blank=True, null=True) 
    slug = models.SlugField(unique=True) 

class Congregation(models.Model): 
    cong_name = models.CharField(max_length=255, blank=True, null=True) 
    meeting_time = models.CharField(max_length=255, blank=True, null=True) 
    cong_address = models.TextField(blank=True, null=True) 
    cong_phone = models.CharField(max_length=255, blank=True, null=True) 
    slug = models.SlugField(unique=True) 

Вот мой views.py:

from django.contrib.auth.decorators import login_required 
from django.http import Http404 
from django.shortcuts import render, render_to_response, redirect 
from django.template import RequestContext 
from profiles.forms import ProfileForm, TalkForm, CongForm 
from profiles.models import Profile, Talk, Congregation 
from django.template.defaultfilters import slugify 

def index(request): 
    ids = Profile.objects.all() 
    return render(request, 'index.html',{'ids': ids,}) 

def about(request): 

    return render(request, 'about.html',) 

def contact(request): 

    return render(request, 'contact.html',) 

def profile_detail(request, slug): 
    #grab the object... 
    profile=Profile.objects.get(slug=slug) 
    #and pass to the template 
    return render(request,'ids/profile_detail.html', { 
     'profile': profile, 
    }) 

@login_required 
def edit_profile(request, slug): 
    profile = Profile.objects.get(slug=slug) 
    if profile.user != request.user: 
     raise Http404 

    form_class = ProfileForm 

    if request.method == 'POST': 
     form = form_class(data=request.POST, instance=profile) 
     if form.is_valid(): 
      form.save() 
      return redirect('profile_detail', slug=profile.slug) 
    else: 
     form = form_class(instance=profile) 
    return render(request, 'ids/edit_profile.html', {'profile': profile, 'form': form, }) 

def create_profile(request): 
    form_class = ProfileForm 

    if request.method == 'POST': 
     form=form_class(request.POST) 
     if form.is_valid(): 
      profile=form.save(commit=False) 
      profile.user = request.user 
      profile.slug = slugify(profile.name) 
      profile.save() 
      slug = slugify(name) 
     return redirect('profile_detail', slug=profile.slug) 
    else: 
     form=form_class() 
    return render(request, 'ids/create_profile.html', {'form': form,}) 

def browse_by_name(request, initial=None): 
    if initial: 
     ids = Profile.objects.filter(name__istartswith=initial).order_by('name') 
    else: 
     ids = Profile.objects.all().order_by('name') 

    return render_to_response('search/search.html', {'ids': ids, 'initial': initial,}, context_instance=RequestContext(request)) 

def talk_detail(request, slug): 
    #grab the object... 
    talk=Talk.objects.get(slug=slug) 
    #and pass to the template 
    return render(request,'ids/talk_detail.html', { 
     'talk': talk, 
    }) 

@login_required 
def edit_talk(request, slug): 
    talk = Talk.objects.get(slug=slug) 
    if profile.user != request.user: 
     raise Http404 

    form_class = TalkForm 

    if request.method == 'POST': 
     form = form_class(data=request.POST, instance=talk) 
     if form.is_valid(): 
      form.save() 
      return redirect('talk_detail', slug=slug.slug) 
    else: 
     form = form_class(instance=talk) 
    return render(request, 'ids/edit_talk.html', {'talk': talk, 'form': form, }) 

def create_talk(request): 
    form_class = TalkForm 

    if request.method == 'POST': 
     form=form_class(request.POST) 
     if form.is_valid(): 
      talk=form.save(commit=False) 
      profile.user = request.user 
      talk.slug = slugify(talk.talk_no) 
      talk.save() 
      slug = slugify(talk_no) 
     return redirect('talk_detail', slug=talk.slug) 
    else: 
     form=form_class() 
    return render(request, 'ids/create_talk.html', {'form': form,}) 

def cong_detail(request, slug): 
    #grab the object... 
    cong=Congregation.objects.get(slug=slug) 
    #and pass to the template 
    return render(request,'ids/cong_detail.html', { 
     'cong': cong, 
    }) 

@login_required 
def edit_cong(request, slug): 
    cong = Congregation.objects.get(slug=slug) 
    if profile.user != request.user: 
     raise Http404 

    form_class = CongForm 

    if request.method == 'POST': 
     form = form_class(data=request.POST, instance=cong) 
     if form.is_valid(): 
      form.save() 
      return redirect('cong_detail', slug=cong.slug) 
    else: 
     form = form_class(instance=cong) 
    return render(request, 'ids/edit_cong.html', {'cong': cong, 'form': form, }) 

def create_cong(request): 
    form_class = CongForm 

    if request.method == 'POST': 
     form=form_class(request.POST) 
     if form.is_valid(): 
      cong=form.save(commit=False) 
      profile.user = request.user 
      cong.slug = slugify(cong.cong_name) 
      cong.save() 
      slug = slugify(cong_name) 
     return redirect('cong_detail', slug=cong.slug) 
    else: 
     form=form_class() 
    return render(request, 'ids/create_cong.html', {'form': form,}) 

Вот мой url.py

from django.contrib import admin 
from profiles.backends import MyRegistrationView 
from django.conf.urls import patterns, include, url 
from django.contrib import admin 
from django.views.generic import TemplateView, RedirectView 
from django.contrib.auth.views import password_reset, password_reset_done, password_reset_confirm, password_reset_complete 

urlpatterns = patterns('', 
    url(r'^$', 'profiles.views.index', name='home'), 
    url(r'^about/$', TemplateView.as_view(template_name='about.html'), name='about'), 
    url(r'^contact/$', TemplateView.as_view(template_name='contact.html'), name='contact'), 

    url(r'^ids/$', RedirectView.as_view(pattern_name='browse')), 
    url(r'^ids/(?P<slug>[-\w]+)/$', 'profiles.views.profile_detail', name='profile_detail'), 
    url(r'^ids/(?P<slug>[-\w]+)/edit/$', 'profiles.views.edit_profile', name='edit_profile'), 

    url(r'^ids/(?P<slug>[-\w]+)/$', 'profiles.views.talk_detail', name='talk_detail'), 
    url(r'^ids/(?P<slug>[-\w]+)/edit/$', 'profiles.views.edit_talk', name='edit_talk'), 

    url(r'^ids/(?P<slug>[-\w]+)/$', 'profiles.views.cong_detail', name='cong_detail'), 
    url(r'^ids/(?P<slug>[-\w]+)/edit/$', 'profiles.views.edit_cong', name='edit_cong'), 

    url(r'^browse/$', RedirectView.as_view(pattern_name='browse')), 
    url(r'^browse/name/$','profiles.views.browse_by_name', name='browse'), 
    url(r'^browse/name/(?P<initial>[-\w]+)/$', 'profiles.views.browse_by_name', name='browse_by_name'), 

    url(r'^accounts/password/reset/$', password_reset, 
    {'template_name': 'registration/password_reset_form.html'}, 
    name="password_reset"), 
    url(r'^accounts/password/reset/done/$', 
    password_reset_done, 
    {'template_name': 'registration/password_reset_done.html'}, 
    name="password_reset_done"), 
    url(r'^accounts/password/reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$', 
    password_reset_confirm, 
    {'template_name': 'registration/password_reset_confirm.html'}, 
    name="password_reset_confirm"), 
    url(r'^accounts/password/done/$', password_reset_complete, 
    {'template_name': 'registration/password_reset_complete.html'}, 
    name="password_reset_complete"), 

    url(r'^accounts/register/$', MyRegistrationView.as_view(), name='registration_register'), 
    url(r'^accounts/create_profile/$', 'profiles.views.create_profile', name='registration_create_profile'), 
    url(r'^accounts/create_talk/$', 'profiles.views.create_talk', name='registration_create_talk'), 
    url(r'^accounts/create_cong/$', 'profiles.views.create_cong', name='registration_create_cong'), 

    url(r'^accounts/', include('registration.backends.default.urls')), 
    url(r'^admin/', include(admin.site.urls)), 
) 

Не уверен, что, если я дал слишком много или слишком мало информации, но, будучи новичком, я понятия не имею, что значит ошибка или какая информация вам может понадобиться, чтобы понять это!

Заранее благодарю вас за помощь в решении этой проблемы и ваше терпение, глядя на весь мой ужасный код! : -s

+0

Вы смогли это решить? У меня такая же проблема, вот так :( – noel

+0

У меня была аналогичная ошибка, и она работает для меня, чтобы удалить все автоматически сгенерированные файлы из папки 'migrations' (так что все, кроме' __init __. Py'), а затем запустить 'makemigrations' и «мигрировать», чтобы сделать их снова. –

ответ

2

Это происходит, когда вы выполните следующие действия:

  1. Run

migrate appname

и исполнение остановлено из-за ошибки.

  1. Вы запускаете его снова, но на этот раз его ошибка, потому что новая таблица уже создана.

  2. Вы редактируете файл миграции, удалите код, создающий таблицу , а затем выполните миграцию снова.

Мой обходной путь, вместо удаления CreateModel, я переехал ее к предыдущей миграции файла.

1

Вам лучше показать код ваших файлов миграции в этой проблеме, потому что проблема, вероятно, есть.

Возможно, у вас не было файла миграции, в котором вы создали свою модель с именем talk.

Проблема может быть решена с добавлением создания модели talk в один из файлов миграции.

0

Эта ошибка ударила меня, когда я редактировал файл миграции, но не заметил, что я разместил один AddField() для поля до того, как была создана модель для этого поля. Может быть, помогает кому-то.