django - 尝试将页面添加到站点时,表没有名为错误的列
问题描述
from django.shortcuts import render
from django.http import HttpResponse
from rango.models import Category
from rango.models import Page
from rango.forms import CategoryForm
from rango.forms import PageForm
from rango.forms import UserForm, UserProfileForm
from django.contrib.auth import authenticate, login
from django.http import HttpResponseRedirect, HttpResponse
from django.core.urlresolvers import reverse
from django.contrib.auth.decorators import login_required
from django.contrib.auth import logout
from datetime import datetime
def index(request):
request.session.set_test_cookie()
category_list = Category.objects.order_by('-name')[:5]
context_dict = {'categories': category_list}
visitor_cookie_handler(request)
response = render(request, 'rango/index.html', context_dict)
return response
def about(request):
if request.session.test_cookie_worked():
print("TEST COOKIE WORKED!")
request.session.delete_test_cookie()
context_dict = {'MEDIA_URL': "/media/"}
visitor_cookie_handler(request)
context_dict['visits'] = request.session['visits']
return render(request, 'rango/about.html', context=context_dict)
def show_category(request, category_name_slug):
context_dict = {}
try:
category = Category.objects.get(slug=category_name_slug)
pages = Page.objects.filter(category=category)
context_dict['category'] = category
except Category.DoesNotExist:
context_dict['category'] = None
#context_dict['pages'] = None
return render(request, 'rango/category.html', context_dict)
def add_category(request):
form = CategoryForm()
if request.method == 'POST':
form = CategoryForm(request.POST)
if form.is_valid():
form.save(commit=True)
return index(request)
else:
print(form.errors)
return render(request, 'rango/add_category.html', {'form': form})
def add_page(request, category_name_slug):
try:
category = Category.objects.get(slug=category_name_slug)
except Category.DoesNotExist:
category = None
form = PageForm()
if request.method == 'POST':
form = PageForm(request.POST)
if form.is_valid():
if category:
page = form.save(commit=False)
page.category = category
page.save()
return show_category(request, category_name_slug)
else:
print(form.errors)
context_dict = {'form':form, 'category': category}
return render(request, 'rango/add_page.html', context_dict)
def register(request):
registered = False
if request.method == 'POST':
user_form = UserForm(data=request.POST)
profile_form = UserProfileForm(data=request.POST)
if user_form.is_valid() and profile_form.is_valid():
user = user_form.save()
user.set_password(user.password)
user.save()
profile = profile_form.save(commit=False)
profile.user = user
# if 'picture' in request.FILES:
# profile.picture = request.FILES['picture']
profile.save()
username = user_form.cleaned_data['username']
password = user_form.cleaned_data['password']
user = authenticate(username=username, password=password)
registered = True
else:
print(user_form.errors, profile_form.errors)
else:
user_form = UserForm()
profile_form = UserProfileForm()
return render(request, 'rango/register.html',
{'user_form': user_form,
'profile_form': profile_form,
'registered': registered})
def show_restaurant(request, restaurant_name_slug):
context_dict = {}
try:
restaurant = Restaurant.objects.get(slug=category_name_slug)
reviews = Review.objects.filter(restaurant=restaurant)
context_dict['reviews'] = reviews
context_dict['restaurant'] = restaurant
except Restaurant.DoesNotExist:
context_dict['restaurant'] = None
context_dict['reviews'] = None
return render(request, 'rango/restaurant.html', context_dict)
def user_login(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(username=username, password=password)
if user:
if user.is_active:
login(request, user)
return HttpResponseRedirect(reverse('index'))
else:
return HttpResponse("Your Rango account is disabled.")
else:
.
print("Invalid login details: {0}, {1}".format(username, password))
return HttpResponse("Invalid login details supplied. Incorrect username or password")
else:
return render(request, 'rango/login.html', {})
@login_required
def restricted(request):
restricted = {'restricted' : 'Since youre logged in, you can see this text!'}
return render(request, 'rango/restricted.html')
以上是我的views.py,这是我的models.py
from django.db import models
from django.template.defaultfilters import slugify
from django.contrib.auth.models import User
class Category(models.Model):
name = models.CharField(max_length=128, unique=True)
likes = models.IntegerField(default=0)
slug = models.SlugField(unique = True)
def save(self, *args, **kwargs):
self.slug = slugify(self.name)
super(Category, self).save(*args, **kwargs)
class Meta:
verbose_name_plural = 'Categories'
def __str__(self):
return self.name
class Page(models.Model):
category = models.ForeignKey(Category)
title = models.TextField(max_length=128)
address = models.TextField(max_length=128)
telephone = models.IntegerField(blank=True)
picture = models.ImageField(upload_to='profile_images/', blank=True, max_length=1000)
slug = models.SlugField(unique=True)
views = models.IntegerField(default=0)
#def save(self, *args, **kwargs):
#changed self.name to self.title
# self.slug = slugify(self.title)
# super(Category, self).save(*args, **kwargs)
class Meta:
verbose_name_plural = 'Pages'
def __str__(self):
return self.title
class UserProfile(models.Model):
user = models.OneToOneField(User)
def __str__(self):
return self.user.username
表格.py:
from django import forms
from django.contrib.auth.models import User
from rango.models import Page, Category, UserProfile
class CategoryForm(forms.ModelForm):
name = forms.CharField(max_length=128, help_text="Please enter the category name.")
likes = forms.IntegerField(widget=forms.HiddenInput(), initial=0)
slug = forms.CharField(widget=forms.HiddenInput(), required=False)
class Meta:
model = Category
fields = ('name',)
class PageForm(forms.ModelForm):
title = forms.CharField(required=True, help_text="Please enter the title of the page.")
address = forms.CharField()
telepohne = forms.IntegerField(help_text="Please enter the phone number of the restaurant if there is one")
views = forms.IntegerField(widget=forms.HiddenInput(), initial=0)
class Meta:
model = Page
exclude = ('category',)
fields = ('title', 'picture', 'address', 'telephone')
class UserForm(forms.ModelForm):
password = forms.CharField(widget=forms.PasswordInput())
class Meta:
model = User
fields = ('username', 'email', 'password')
class UserProfileForm(forms.ModelForm):
class Meta:
model = UserProfile
exclude = ('user',)
我想添加一个功能来添加一个包含用户输入的餐厅数据的新网页。当我填写字段以添加新页面并按提交时,我在网站上收到以下错误:
OperationalError at /rango/category/test/add_page/
table rango_page has no column named address
Request Method: POST
Request URL: http://127.0.0.1:8000/rango/category/test/add_page/
Django Version: 1.11.17
Exception Type: OperationalError
Exception Value:
table rango_page has no column named address
Exception Location: C:\ProgramData\Anaconda2\lib\site-packages\django\db\backends\sqlite3\base.py in execute, line 328
Python Executable: C:\ProgramData\Anaconda2\python.exe
Python Version: 2.7.15
Python Path:
['H:\\WADpp\\WAD2-current',
'C:\\ProgramData\\Anaconda2\\python27.zip',
'C:\\ProgramData\\Anaconda2\\DLLs',
'C:\\ProgramData\\Anaconda2\\lib',
'C:\\ProgramData\\Anaconda2\\lib\\plat-win',
'C:\\ProgramData\\Anaconda2\\lib\\lib-tk',
'C:\\ProgramData\\Anaconda2',
'C:\\ProgramData\\Anaconda2\\lib\\site-packages',
'C:\\ProgramData\\Anaconda2\\lib\\site-packages\\win32',
'C:\\ProgramData\\Anaconda2\\lib\\site-packages\\win32\\lib',
'C:\\ProgramData\\Anaconda2\\lib\\site-packages\\Pythonwin']
以及终端上的以下错误
Internal Server Error: /rango/category/test/add_page/
Traceback (most recent call last):
File "C:\ProgramData\Anaconda2\lib\site-packages\django\core\handlers\exception.py", line 41, in inner
response = get_response(request)
File "C:\ProgramData\Anaconda2\lib\site-packages\django\core\handlers\base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\ProgramData\Anaconda2\lib\site-packages\django\core\handlers\base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "H:\WADpp\WAD2-current\rango\views.py", line 128, in add_page
page.save()
File "C:\ProgramData\Anaconda2\lib\site-packages\django\db\models\base.py", line 808, in save
force_update=force_update, update_fields=update_fields)
File "C:\ProgramData\Anaconda2\lib\site-packages\django\db\models\base.py", line 838, in save_base
updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
File "C:\ProgramData\Anaconda2\lib\site-packages\django\db\models\base.py", line 924, in _save_table
result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
File "C:\ProgramData\Anaconda2\lib\site-packages\django\db\models\base.py", line 963, in _do_insert
using=using, raw=raw)
File "C:\ProgramData\Anaconda2\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "C:\ProgramData\Anaconda2\lib\site-packages\django\db\models\query.py", line 1079, in _insert
return query.get_compiler(using=using).execute_sql(return_id)
File "C:\ProgramData\Anaconda2\lib\site-packages\django\db\models\sql\compiler.py", line 1112, in execute_sql
cursor.execute(sql, params)
File "C:\ProgramData\Anaconda2\lib\site-packages\django\db\backends\utils.py", line 79, in execute
return super(CursorDebugWrapper, self).execute(sql, params)
File "C:\ProgramData\Anaconda2\lib\site-packages\django\db\backends\utils.py", line 64, in execute
return self.cursor.execute(sql, params)
File "C:\ProgramData\Anaconda2\lib\site-packages\django\db\utils.py", line 94, in __exit__
six.reraise(dj_exc_type, dj_exc_value, traceback)
File "C:\ProgramData\Anaconda2\lib\site-packages\django\db\backends\utils.py", line 64, in execute
return self.cursor.execute(sql, params)
File "C:\ProgramData\Anaconda2\lib\site-packages\django\db\backends\sqlite3\base.py", line 328, in execute
return Database.Cursor.execute(self, query, params)
OperationalError: table rango_page has no column named address
为什么会出现这个错误?我该如何解决?
解决方案
你在运行 makemigrations 后编辑了 models.py 吗?
如果是这样,那么您应该从您的应用程序中删除您的数据库和迁移(不要删除init .py)然后运行:
python3 manage.py makemigrations
然后
python3 manage.py migrate
推荐阅读
- ruby-on-rails - 不要在每个类方法中使用 self 并且不要在 ruby 中使用单例模型
- java - Java HttpRequest 超时意外抛出 HttpConnectTimeoutException
- docker - Docker不会在图像中复制json文件
- amazon-web-services - 如何确保我编写的 AWS Glue 爬虫使用的是 OpenCSV SerDe 而不是 LazySimpleSerDe?
- pandas - Panda DataFrame 在两列中组合唯一值以进行 OrdinalEncoder Fit
- optimization - 动量对随机梯度下降的影响是否有深入探讨?
- git - 使用 sed 或 awk 自动记录 gitconfig 别名
- java - spring data JPA:如何执行聚合函数
- reactjs - Graphql/Apollo/React 无法导入本地图片
- android - 是否可以为应用程序设置单个默认语言环境?