【问题标题】:Django and direct database manipulationDjango 和直接数据库操作
【发布时间】:2017-01-20 09:50:07
【问题描述】:

我有一个项目,客户必须登录数据库并在那里手动输入数据。是的,直接访问,不要问为什么!

我想要的是当我将更改应用到表时,创建和修改的字段将自动完成当前日期和时间。

我正在使用 MySQL。

所以我这样创建了我的模型..

class Atlantis(models.Model):
    description = models.TextField('description', max_length=200 ,  default = None,null=True,blank=True)
    amount = models.IntegerField('Amount', default=0)
    quantity = models.IntegerField('Quantity', default=0)
    inserted = models.BooleanField(default=False)
    update_chk = models.BooleanField(default=False) 
    created = models.DateTimeField(auto_now=True,auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)

def save(self, *args, **kwargs):
    ''' On save, update timestamps '''
    if not self.id:
        self.created = timezone.now()
    self.modified = timezone.now()
    return super(Atlantis, self).save(*args, **kwargs)

当我将数据添加到数据库时,创建的字段不会使用当前时间戳自动完成。

我尝试修改数据库中的表并将创建字段的默认设置更改为 CURRENT_TIMESTAMP,但出现错误。

所以我在问,我所要求的可以完成吗?

【问题讨论】:

  • 当您说添加数据时,您的意思是直接在没有orm的情况下进行吗?错误是什么?
  • 用户必须将数据直接输入到数据库表中。错误是:错误 1067:“已创建”的默认值无效。我试图把 CURRENT_TIMESTAMP
  • 如果他们直接对数据库进行操作,那么 django 绝对无能为力。
  • 我不想让 django 这样做。我希望 MySQL 能够做到这一点。一旦用户点击“应用”并且 sql 语句运行 INSERT INTO db_name.db_table (table_column) VALUES ('some value');

标签: python mysql django database


【解决方案1】:

我有同样的问题试试这个:

def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
  self._meta.local_fields = [f for f in self._meta.local_fields if f.name not in ('your_field')]
  super(Atlantis, self).save(force_insert, force_update, using, update_fields)

对我有帮助

【讨论】:

    【解决方案2】:

    所以我更改了 mySQL 表...并将日期时间字段更改为时间戳。 Django 将其读取为时间戳。所以那里没有问题。这是导致问题的 mySQL 版本。无法将 CURRENT_TIMESTAMP 默认值与日期时间字段一起使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-19
      • 1970-01-01
      • 2018-05-24
      • 1970-01-01
      • 1970-01-01
      • 2014-03-23
      • 1970-01-01
      相关资源
      最近更新 更多