Añade el campo DateTimeField al modelo Django existente.
Estoy tratando de agregar 2 campos de fecha (targetdate y actualdate) al modelo existente. Ya existe un campo de fecha (report_date) en la tabla existente.
Los valores predeterminados para estos campos (targetdate y actualdate) deben ser 5 días más que report_date.
Mis códigos están a continuación.
Models.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) # Campo existente
target_date = models.DateTimeField() # Nuevo campo a agregar
actual_date = models.DateTimeField() # Nuevo campo a agregar
He intentado varias opciones y estoy obteniendo el siguiente error.
django.db.utils.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]ALTER TABLE only allows columns to be added that can contain nulls, or have a DEFAULT definition specified, or the column being added is an identity or timestamp column, or alternatively if none of the previous conditions are satisfied the table must be empty to allow addition of this column. Column 'actual<em>date' cannot be added to non-empty table 'app1</em>qc2<em>report</em>table' because it does not satisfy these conditions. (4901) (SQLExecDirectW)")
davy.ai
Para agregar los nuevos campos con valores predeterminados, puedes modificar el modelo
qc2_report_table
de la siguiente manera:Aquí,
timezone.now()
es la fecha y hora actual, ytimezone.timedelta(days=5)
suma 5 días a ella. De esta manera, tanto los campostarget_date
comoactual_date
tendrán valores predeterminados que son 5 días más quereport_date
.El error que estás recibiendo sugiere que estás intentando agregar los nuevos campos a una tabla no vacía sin especificar valores predeterminados ni permitir nulos. Para evitar este error, puedes proporcionar valores predeterminados como se muestra arriba o permitir nulos para los nuevos campos usando
null=True
.