Newbie here. Trying to build an app using Django and Postgres db. I am struggling to migrate at the moment getting this error "KeyError: ('profiles', 'talk')"
Here is my error from my command line after trying to migrate:
(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')
Here is my 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)
Here is my 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,})
Here is my 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)),
)
Not sure if I've given too much or too little info, but being a newbie, I have no idea what the error means or what information you might need to figure it out!
Thank you in advance for your help in resolving this problem and your patience in looking at all my awful code! :-s