Skip to main content
 首页 » 编程设计

python之Django 没有这样的列错误

2024年08月27日29lexus

我的 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) 

请您参考如下方法:

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