在作models以前,最好將https://docs.djangoproject.com/en/1.6/ 中的the model layer 細讀。
python
(1)*args和**kwargs。的使用mysql
在Django中常常見到含有這兩個參數的函數。*args可表明任意個參數:func(arg, *args)表明這個函數能夠有一個或更多個參數。能夠理解成一個參數list。**kwargs能夠表明任意個K=V形式的參數。大致就是這樣。linux
(2)不經意間,被MySQL的編碼折磨。Ubuntu下修改一直有問題。sql
頭痛。折騰了半天仍是沒搞好,修改/etc/mysql/my.cnf 文件後,重啓Mysql服務失敗,改回去就能夠。可是字符集問題仍是沒搞好。暫時先用着SQLite3吧。:-(shell
找到修改方案了。以前網上的教程有些錯誤。數據庫
使用:status 查看數據庫信息,也可以使用 mysql> show variables like 'character%';
django
mysql> status -------------- mysql Ver 14.14 Distrib 5.5.38, for debian-linux-gnu (i686) using readline 6.2 Connection id: 36 Current database: Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 5.5.38-0ubuntu0.12.04.1 (Ubuntu) Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: latin1 Db characterset: latin1 Client characterset: utf8 Conn. characterset: utf8 UNIX socket: /var/run/mysqld/mysqld.sock Uptime: 2 min 39 sec
而後修改/etc/mysql/my.cnf 數據庫配置文件。
須要使用root權限
ubuntu
在[client]節點下添加 default-character-set=utf8 在[mysqld]節點下添加 character-set-server=utf8 collation-server=utf8_general_ci
而後重啓MySQL服務便可session
root@dizzy-pc:/home/dizzy# service mysql restart mysql stop/waiting mysql start/running, process 3233
""" Django settings for mysite project. For more information on this file, see https://docs.djangoproject.com/en/1.6/topics/settings/ For the full list of settings and their values, see https://docs.djangoproject.com/en/1.6/ref/settings/ """ # Build paths inside the project like this: os.path.join(BASE_DIR, ...) import os BASE_DIR = os.path.dirname(os.path.dirname(__file__)) # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/1.6/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = '4@01u6jlly!dr*x&91$p@bqo4w(%0t0g8zp+6g9s650(&glpkv' # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True TEMPLATE_DEBUG = True ALLOWED_HOSTS = [] # Application definition INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', #add by dizzy in 2014-07-29 19:36:23 'dlog', ) MIDDLEWARE_CLASSES = ( 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ) ROOT_URLCONF = 'mysite.urls' WSGI_APPLICATION = 'mysite.wsgi.application' # Database # https://docs.djangoproject.com/en/1.6/ref/settings/#databases DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'dlog', 'USER': 'root', 'PASSWORD':'944898186', 'HOST': 'localhost', 'PORT': '3306', } } # Internationalization # https://docs.djangoproject.com/en/1.6/topics/i18n/ LANGUAGE_CODE = 'zh-cn' TIME_ZONE = 'Asia/Shanghai' USE_I18N = True USE_L10N = True USE_TZ = True # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/1.6/howto/static-files/ STATIC_URL = '/static/'
#coding=utf-8 from django.db import models # Create your models here. class BaseModel(models.Model): name = models.CharField(u'名稱', max_length=20) crttime = models.DateTimeField(u'建立時間',auto_now_add=True) def __unicode__(self): return self.name class Meta: abstract=True class Author(BaseModel): class Meta: db_table = 'dlog_author' verbose_name = u'做者' class Theme(BsaeModel): class Meta: db_table = 'dlog_theme' verbose_name = u'主題' class Tag(BaseModel): class Meta: db_table = 'dlog_tage' verbose_name = u'標籤' class Category(BaseModel): class Meta: db_table = 'dlog_category' verbose_name = u'分類' class Article(BaseModel): title = models.CharField(u'標題', max_length=100) author = models.ForeignKey(Author, verbose_name=u'做者') theme = models.ForeignKey(Theme, verbose_name=u'主題') tags = models.ManyToManyField(Tag, blank=True, verbose_name=u'標籤') category = models.ForeignKey(Category, verbose_name=u'分類') abstract = models.TextField(u'摘要') created_time = models.DateTimeField(u'建立時間', auto_now_add=True) updated_time = models.DateTimeField(u'修改時間', auto_now=True) content = models.TextField(u'正文') click_count = models.IntegerField(u'點擊量', default=0, editable=False) comment_count = models.IntegerField(u'評論數',default=0, editable=False) def __unicode__(self): return self.title def click(self): pass class Meta: db_table = 'dlog_article' verbose_name = u'文章'
對應的SQL:app
dizzy@dizzy-pc:~/dizzy/mysite$ ./manage.py sql dlog BEGIN; CREATE TABLE `dlog_author` ( `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `name` varchar(20) NOT NULL, `crttime` datetime NOT NULL ) ; CREATE TABLE `dlog_theme` ( `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `name` varchar(20) NOT NULL, `crttime` datetime NOT NULL ) ; CREATE TABLE `dlog_tage` ( `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `name` varchar(20) NOT NULL, `crttime` datetime NOT NULL ) ; CREATE TABLE `dlog_category` ( `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `name` varchar(20) NOT NULL, `crttime` datetime NOT NULL ) ; CREATE TABLE `dlog_article_tags` ( `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `article_id` integer NOT NULL, `tag_id` integer NOT NULL, UNIQUE (`article_id`, `tag_id`) ) ; ALTER TABLE `dlog_article_tags` ADD CONSTRAINT `tag_id_refs_id_e377ffd2` FOREIGN KEY (`tag_id`) REFERENCES `dlog_tage` (`id`); CREATE TABLE `dlog_article` ( `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `name` varchar(20) NOT NULL, `crttime` datetime NOT NULL, `title` varchar(100) NOT NULL, `author_id` integer NOT NULL, `theme_id` integer NOT NULL, `category_id` integer NOT NULL, `abstract` longtext NOT NULL, `createdtime` datetime NOT NULL, `updatedtime` datetime NOT NULL, `content` longtext NOT NULL, `click_count` integer NOT NULL, `comment_count` integer NOT NULL ) ; ALTER TABLE `dlog_article` ADD CONSTRAINT `author_id_refs_id_c7985c8d` FOREIGN KEY (`author_id`) REFERENCES `dlog_author` (`id`); ALTER TABLE `dlog_article` ADD CONSTRAINT `category_id_refs_id_b7340953` FOREIGN KEY (`category_id`) REFERENCES `dlog_category` (`id`); ALTER TABLE `dlog_article` ADD CONSTRAINT `theme_id_refs_id_d135d084` FOREIGN KEY (`theme_id`) REFERENCES `dlog_theme` (`id`); ALTER TABLE `dlog_article_tags` ADD CONSTRAINT `article_id_refs_id_61edf8a3` FOREIGN KEY (`article_id`) REFERENCES `dlog_article` (`id`); COMMIT;
-- 2014年07月30日03:17:31
#coding=utf-8 from django.contrib import admin from models import Article,Author,Theme,Tag,Category # Register your models here. class ArticleAdmin(admin.ModelAdmin): fields = ['title', 'author', 'abstract', 'theme', 'category', 'content', 'tags'] list_display = ['id','title', 'theme', 'category', 'tag_display', 'created_time', 'click_count', 'comment_count'] list_editable = ['title','theme','category'] list_filter = [] list_display_links = ['id'] search_fields = ['title'] def tag_display(self, obj): return ','.join([tag.name for tag in obj.tags.all()]) tag_display.short_description=u'標籤' class CAdmin(admin.ModelAdmin): fields = ['name'] list_display = ['name', 'crttime'] admin.site.register(Article, ArticleAdmin) admin.site.register([Author, Theme, Tag, Category],CAdmin)
這樣後臺顯示部分基本能夠了。
這樣更新貌似不太好,等初步完成以後傳到GitHub上分享吧.....
-- 2014年07月30日16:11:28