es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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)")
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para agregar los nuevos campos con valores predeterminados, puedes modificar el modelo qc2_report_table de la siguiente manera:

    class qc2_report_table(models.Model):
        report_date = models.DateTimeField(auto_now_add=True) # Campo existente
        target_date = models.DateTimeField(default=timezone.now() + timezone.timedelta(days=5)) # Nuevo campo con valor predeterminado
        actual_date = models.DateTimeField(default=timezone.now() + timezone.timedelta(days=5)) # Nuevo campo con valor predeterminado
    

    Aquí, timezone.now() es la fecha y hora actual, y timezone.timedelta(days=5) suma 5 días a ella. De esta manera, tanto los campos target_date como actual_date tendrán valores predeterminados que son 5 días más que report_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.

Comments are closed.