Фильтр QuerySet получает значение столбца None, но на самом деле это не None - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть часть данных в 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

Я хочу знать, почему этого нет.

1 Ответ

0 голосов
/ 10 апреля 2019

Существует несколько опций, которые помогут вам в этом

  • auto_now_add - Автоматически установить поле в настоящее время при первом создании объекта
  • auto_now - Автоматически настраивать поле на сейчас при каждом сохранении объекта

Таким образом, вы будете использоватьэто в вашей модели вот так;

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

Предостережение в том, что они не отображаются в admin, потому что они становятся полями только для чтения, поэтому в классе admin вам нужно определить;

readonly_fields=('create_time', 'modified_time')

Документы для readonly_fields

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...