QuerySet过滤器获取无列值,但面对它不是无

问题描述 投票:0回答:1

我在mysql中有一段数据,它有一个名为create_time的列,其值为0000-00-00 00:00:00.000000。我在Navicat检查它。表模型:

class Meta:
        db_table = 'region_info'

    region_id = models.CharField(max_length=32, unique=True, help_text=u"region id")
    region_name = models.CharField(max_length=32, unique=True, help_text=u"数据中心名称")
    region_alias = models.CharField(max_length=32, help_text=u"数据中心别名")
    datacenter_env = models.CharField(max_length=20, help_text=u"数据中心所属环境", default='production')
    url = models.CharField(max_length=256, help_text=u"数据中心API url")
    wsurl = models.CharField(max_length=256, help_text=u"数据中心Websocket url")
    httpdomain = models.CharField(max_length=256, help_text=u"数据中心http应用访问根域名")
    tcpdomain = models.CharField(max_length=256, help_text=u"数据中心tcp应用访问根域名")
    token = models.CharField(max_length=40, null=True, blank=True, default="", help_text=u"数据中心token")
    status = models.CharField(max_length=2, help_text=u"数据中心状态 0:编辑中 1:启用 2:停用 3:维护中")
    create_time = models.DateTimeField(default=datetime.now, help_text=u"创建时间")
    desc = models.CharField(max_length=128, blank=True, help_text=u"数据中心描述")
    scope = models.CharField(max_length=10, default="private", help_text=u"数据中心范围 private|public")
    ssl_ca_cert = models.TextField(blank=True, null=True, help_text=u"数据中心访问ca证书地址")
    cert_file = models.TextField(blank=True, null=True, help_text=u"验证文件")
    key_file = models.TextField(blank=True, null=True, help_text=u"验证的key")

当我使用RegionConfig.objects.filter获取我的数据时,我发现属性create_time是None,就像:

>>> region = RegionConfig.objects.filter(region_name="rainbond")
>>> print len(region)
1
>>> r = region[0]
>>> print r.datacenter_env
test
>>> print r.create_time   
None

我想知道为什么没有。

python-2.7 django-models
1个回答
0
投票

有几个选项可以帮助您

  • auto_now_add - 首次创建对象时自动将字段设置为now
  • auto_now - 每次保存对象时自动将字段设置为现在

所以你要在你的模型上使用这些;

class RegionConfig(models.Model):
    create_time = models.DateTimeField(auto_now_add=True)
    modified_time = models.DateTimeField(auto_now=True)

需要注意的是,它们不会显示在admin中,因为它们会成为只读字段,因此在管理类中,您需要定义;

readonly_fields=('create_time', 'modified_time')

readonly_fields的文件

© www.soinside.com 2019 - 2024. All rights reserved.