将 DateTimeField 添加到现有 Django 模型

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

我正在尝试向现有模型添加 2 个日期字段(目标日期和实际日期)。现有表中已经有一个日期字段 (report_date)。

这些字段的默认值(目标日期和实际日期)应比 report_date 多 5 天。

我的代码如下。

模型.py

from django.contrib.auth.models import AbstractUser
from django.db import models
from django.utils import timezone
from datetime import date, time, datetime
import datetime


class qc2_report_table(models.Model):
    report_date = models.DateTimeField( auto_now_add=True ) # Existing field
    target_date = models.DateTimeField() # New field to be added
    actual_date = models.DateTimeField() # New field to be added

我尝试了各种选项,但收到以下错误。

django.db.utils.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC SQL Server 驱动程序 17][SQL Server]ALTER TABLE 仅允许列 要添加的内容可以包含空值,或者具有 DE FAULT 定义 指定的,或者添加的列是标识或时间戳 列,或者如果前面的条件都不满足 如果满足,则表必须为空才能允许添加此列。 列“actual_date”无法添加到非空 表'app1_qc2_report_table'因为它不满足这些 状况。 (4901)(SQLEx ecDirectW)“)

python datetime django-models alter
2个回答
0
投票

删除所有迁移文件(0001_initial.py 除外)后,我就可以迁移了。我不知道错误背后的原因,但这个修复对我有用。


0
投票

我也遇到了同样的问题,这非常令人沮丧。当我指定默认值时,它会给我这个错误:

Traceback (most recent call last):
  File "/opt/playpens/sandboxes/sknox/cibc/vor/playpens/cibc/artifacts/report_app/manage.py", line 22, in <module>
execute_from_command_line(sys.argv)
  File "/opt/vor/venv/lib/python3.11/site-packages/django/core/management/__init__.py", line 442, in execute_from_command_line
utility.execute()
  File "/opt/vor/venv/lib/python3.11/site-packages/django/core/management/__init__.py", line 436, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/opt/vor/venv/lib/python3.11/site-packages/django/core/management/base.py", line 413, in run_from_argv
self.execute(*args, **cmd_options)
  File "/opt/vor/venv/lib/python3.11/site-packages/django/core/management/base.py", line 459, in execute
output = self.handle(*args, **options)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/vor/venv/lib/python3.11/site-packages/django/core/management/base.py", line 107, in wrapper
res = handle_func(*args, **kwargs)
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/vor/venv/lib/python3.11/site-packages/django/core/management/commands/migrate.py", line 356, in handle
post_migrate_state = executor.migrate(
                     ^^^^^^^^^^^^^^^^^
  File "/opt/vor/venv/lib/python3.11/site-packages/django/db/migrations/executor.py", line 135, in migrate
state = self._migrate_all_forwards(
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/vor/venv/lib/python3.11/site-packages/django/db/migrations/executor.py", line 167, in _migrate_all_forwards
state = self.apply_migration(
        ^^^^^^^^^^^^^^^^^^^^^
  File "/opt/vor/venv/lib/python3.11/site-packages/django/db/migrations/executor.py", line 252, in apply_migration
state = migration.apply(state, schema_editor)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/vor/venv/lib/python3.11/site-packages/django/db/migrations/migration.py", line 132, in apply
operation.database_forwards(
  File "/opt/vor/venv/lib/python3.11/site-packages/django/db/migrations/operations/fields.py", line 108, in database_forwards
schema_editor.add_field(
  File "/opt/vor/venv/lib/python3.11/site-packages/mssql/schema.py", line 1056, in add_field
self.execute(sql, params)
  File "/opt/vor/venv/lib/python3.11/site-packages/mssql/schema.py", line 1375, in execute
cursor.execute(sql, params)
  File "/opt/vor/venv/lib/python3.11/site-packages/django/db/backends/utils.py", line 79, in execute
return self._execute_with_wrappers(
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/vor/venv/lib/python3.11/site-packages/django/db/backends/utils.py", line 92, in _execute_with_wrappers
return executor(sql, params, many, context)
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/vor/venv/lib/python3.11/site-packages/django/db/backends/utils.py", line 100, in _execute
with self.db.wrap_database_errors:
  File "/opt/vor/venv/lib/python3.11/site-packages/django/db/utils.py", line 91, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/opt/vor/venv/lib/python3.11/site-packages/django/db/backends/utils.py", line 105, in _execute
return self.cursor.execute(sql, params)
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/vor/venv/lib/python3.11/site-packages/mssql/base.py", line 621, in execute
return self.cursor.execute(sql, params)
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
django.db.utils.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC Driver 18 for SQL Server][SQL Server]'portfolio_load_date' is not a constraint. (3728) (SQLExecDirectW)")
© www.soinside.com 2019 - 2024. All rights reserved.