bib*_*316 6 django migrate django-models django-migrations
新手在这里.尝试使用Django和Postgres db构建应用程序.我正在努力迁移此刻收到此错误"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')
Run Code Online (Sandbox Code Playgroud)
这是我的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)
Run Code Online (Sandbox Code Playgroud)
这是我的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,})
Run Code Online (Sandbox Code Playgroud)
这是我的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)),
)
Run Code Online (Sandbox Code Playgroud)
不确定我是否提供了太多或太少的信息,但作为一个新手,我不知道错误意味着什么或者您可能需要弄清楚哪些信息!
提前感谢您在解决此问题方面提供的帮助,以及您耐心查看我所有糟糕的代码!:-s
当您执行以下步骤时会发生这种情况:
迁移应用程序名称
并且执行因错误而停止。
您再次运行它,但这一次出现错误,因为新表已经创建。
您编辑迁移文件,删除创建表的代码部分,然后再次运行迁移。
我的解决方法是,我没有删除 CreateModel,而是将其移动到以前的迁移文件中。
| 归档时间: |
|
| 查看次数: |
3583 次 |
| 最近记录: |