毎回__unicode__とか定義するの面倒。2
本来のdjangoの機能を使って実装した方が見通しが良いと教えてもらった。
こんな感じに作れば良いらしい。
from django.db import models class InspectableModel(models.Model): def __unicode__(self): field_names = [field.get_attname() for field in self._meta.fields] results = [] results.append('%s object' % self.__class__.__name__) for name in field_names: text = " %s: %s" % (name, self.__getattribute__(name)) results.append(text) return unicode("\n".join(results)) class Meta: abstract = True import datetime class Blog(InspectableModel): title = models.CharField(max_length=255) date = models.DateTimeField(default=datetime.datetime.now()) author = models.CharField(max_length=255, default="anonymous") content = models.TextField()
Meta定義したクラスはテーブルを作らない。代わりに継承したクラスに、継承元のクラスのフィールドを作成する。
http://djangoproject.jp/doc/ja/1.0/topics/db/models.html#abstract-base-classes
使用結果
昨日は、実行例を載せていなかったから今日は載せておく。
#python manage.py shell In [1]: from bar.models import * In [2]: Blog.objects.create() Out[2]: <Blog: Blog object id: 1 title: date: 2011-03-03 10:54:49.847290 author: anonymous content: > In [3]: Blog.objects.create(title=u"こんにちは",content="はじめまして、今日から 何か書きます") Out[3]: <Blog: [Bad Unicode data]>