但是如果修改了 model (增加/删除/修改 field)或者删除 model,syncdb 不做任何动作
这样会导致错误
django 会验证model和数据库,如果缺失table或field,会提示错误。
但是对于
- model 中没有,数据库中有的表格
- model 中没有,数据库中有的列
model.Manager
model.objects.objects 是一个 model manager
In short, a model’s manager is an object through which Django models perform database queries.
默认的manager 是 model.Manager
可以定义自己的manager,继承model.Manager。定义自己的函数
具体参见 Django Book 2.0 第10章
modelAdmin
The ModelAdmin class is the representation of a model in the admin interface. These are stored in a file named admin.py in your application.modelAdmin 管的是 admin 如何呈现/管理/操作数据。
具体参见
The Django admin site
默认的modelAdmin 为 admin.ModelAdmin。在admin 注册时没声明modelAdmin即使用默认
可以定义自己的,继承admin.ModelAdmin,并在注册时声明
admin.ModelAdmin 定义了很多参数,貌似如果要修改这些参数,就必须继承admin.ModelAdmin
定义自己的 modelAdmin action
modelAdmin.actions: Admin actions 用于对选择的大批记录做某项操作,而非一个一个来。modelAdmin.actions 是一个函数列表,函数必须接受三个参数
modeladmin, request, queryset
综合上述两点
from django.contrib import admin from myapp.models import Article def make_published(modeladmin, request, queryset): queryset.update(status='p') make_published.short_description = "Mark selected stories as published" class ArticleAdmin(admin.ModelAdmin): list_display = ['title', 'status'] ordering = ['title'] actions = [make_published] admin.site.register(Article, ArticleAdmin)
modelAdmin inlines
inlines 用于在 多对一 关系中,用“一来”管理“多”比如 book 的 publisher 域为 foreignKey 多对一
则可以把 book 作为 publisher 的 inline
参见
The Django admin site
修改 model
修改 model 的解决办法是1. south
2. 手动修改数据库
手动修改数据库
具体参考 django book 2.0Chapter 10: Advanced Models
注意如果要增加 not null field
要按如下步骤
- 增加 null field
- 赋值
- 设为 not null
sqlite3
sqlite3 不支持SQL alter column 命令sqlite3 的使用手册
import sqlite3 as sq conn = sq.connect('sqlite3.db') c = conn.cursor() #c.execute('ALTER TABLE books_book ADD COLUMN status varchar(1)') #c.execute("UPDATE books_book SET status='d'") c.execute("ALTER TABLE books_book ALTER COLUMN status varchar(1) NOT NULL") conn.commit() print c.fetchall() c.close()
0 comments:
Post a Comment