我在models.py文件中有以下代码:
from django.db import models
from django.db.models import permalink
class Page(models.Model):
name = models.CharField(max_length=100,db_index=True, unique=True)
slug = models.SlugField(max_length=100,db_index=True, unique=True)
def __unicode__(self):
return '%s' % self.name
class Category(models.Model):
name = models.CharField(max_length=100, db_index=True, unique=True)
slug = models.SlugField(max_length=100, db_index=True, unique=True)
def __unicode__(self):
return '%s' % self.name
class Post(models.Model):
title = models.CharField(max_length=100, unique=True, db_index=True)
body = models.TextField()
post_date = models.DateField(db_index = True, auto_now_add=True)
category = models.ForeignKey('board.Category')
page = models.ForeignKey('board.Page')
def __unicode__(self):
return '%s' % self.title
@permalink
def get_absolute_url(self):
return "/%i/%i" % Page.slug, self.id
当我尝试在管理页面中添加Post对象时(我也配置了admin.py),我收到以下错误:
没有这样的专栏:board_category.name
我做了我的研究,并尝试删除表并再次执行syncdb,但不知怎的,它仍然显示此错误。
所以我列出了我的表格:
CREATE TABLE "board_page" (
"id" integer NOT NULL PRIMARY KEY,
"name" varchar(100) NOT NULL UNIQUE,
"slug" varchar(100) NOT NULL UNIQUE
)
;
CREATE TABLE "board_category" (
"id" integer NOT NULL PRIMARY KEY,
"name" varchar(100) NOT NULL UNIQUE,
"slug" varchar(100) NOT NULL UNIQUE
)
;
CREATE TABLE "board_post" (
"id" integer NOT NULL PRIMARY KEY,
"title" varchar(100) NOT NULL UNIQUE,
"body" text NOT NULL,
"post_date" date NOT NULL,
"category_id" integer NOT NULL REFERENCES "board_category" ("id"),
"page_id" integer NOT NULL REFERENCES "board_page" ("id")
)
;
CREATE INDEX "board_post_896eb94b" ON "board_post" ("post_date");
CREATE INDEX "board_post_6f33f001" ON "board_post" ("category_id");
CREATE INDEX "board_post_3fb9c94f" ON "board_post" ("page_id");
我不是SQL专家,但我可以清楚地看到board_page.name列存在,所以我真的不知道为什么这会给我一个错误。
最奇怪的是,添加另一个页面或类别实际上是有效的....
- 编辑
from django.contrib import admin
from board.models import Page, Post, Category
class PageAdmin(admin.ModelAdmin):
#fields = ['name','slug']
pass
class PostAdmin(admin.ModelAdmin):
#fields = ['title','body','category','page']
pass
class CategoryAdmin(admin.ModelAdmin):
#fields = ['name','slug']
pass
admin.site.register(Page, PageAdmin)
admin.site.register(Post, PostAdmin)
admin.site.register(Category, CategoryAdmin)
答案 0 :(得分:2)
syncdb
只会为尚未安装的模型创建表。它永远不会发出ALTER TABLE语句来匹配安装后对模型类所做的更改。
更好地使用South迁移模型的更改。
首次迁移:
python manage.py schemamigration yourapp --initial
python manage.py migrate yourapp
其他迁移:
python manage.py schemamigration yourapp --auto
python manage.py migrate yourapp
答案 1 :(得分:1)
如果您向模型中添加了某些内容,之后您没有同步,则会发生这种情况。 如果您正在开始项目,我建议删除您的数据库并重新创建它,然后:
python manage.py syncdb
否则使用南方。 http://south.readthedocs.org/en/latest/
它很有趣但有时重启服务器会有所帮助。它过去曾为我工作过几次。