質問: models.datetimefield(auto_now=true) 行を更新すると、次のようになります。[sun nov 15 02:18:12 2009] [error] /home/ptarjan/projects/twitter-meme/django/db/backends/mysql/base.py:84: warning: column 'created' cannot be null [sun nov 15 02:18:12 2009] [error] return self.cursor.execute(query, args) 私のデータベースの関連部分は次のとおりです。 `created` datetime not null, `modified` datetime not null, これは心配の原因ですか。副次的な質問:私の管理ツールでは、これら2つのフィールドは表示されません。それは予想されますか?
回答: createdにtimezone.now()を、modifiedにauto_nowを使うことができます。from django.utils import timezone class user(models.model): created = models.datetimefield(default=timezone.now()) modified = models.datetimefield(auto_now=true) デフォルトのauto- increment intの代わりにカスタムの主キーを使用している場合、auto_now_addはバグの原因となります。これがdjangoのデフォルトのコード datetimefield.pre_save withauto_nowとauto_now_addです。def pre_save(self, model_instance, add): if self.auto_now or (self.auto_now_add and add): value = timezone.now() setattr(model_instance, self.attname, value) return value else: return super(datetimefield, self).pre_save(model_instance, add) addというパラメータが何であるかわかりません。私はそれがいくつかのようになることを願っています:add = true if getattr(model_instance, 'id') else false 新しいレコードはattr idを持たないので、getattr(model_instance, 'id')はfalseを返し、フィールドに値を設定しないことになります。