python - Django没有这样的列错误

标签 python sql django

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

关于python - Django没有这样的列错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25068961/

相关文章:

python - 如何删除 Tkinter Python 应用程序中的视频?

Sql数据库与文档数据库?

sql - 如何合并窗口内的重叠时间?

python - 与反向函数和 kwargs 有关的问题

django - 在 Ubuntu 中使用 systemd 配置 celery - 模块路径失败

java - 如何将python中的定位代码转换为kotlin?

python - 如何在Flask中异步调用函数?

python - 如何循环Python列表以将其从M个值扩展到N个值(M < N)?

sql - 使用 SQLKorma 获取语法 : Failure to execute query with SQL 的异常

Django - save() 更新重复键