Миграция в PostgreSQL в Django - слишком большое значение ошибки для изменения типа символа (2) - PullRequest
0 голосов
/ 30 сентября 2018

Я получил следующую ошибку на пути миграции sqLite на PostgreSQL для Django.

psycopg2.DataError: value too long for type character varying(2)  

Я ссылался на другие статьи ( 1 , 2 ).И исследуйте файл models.py, чтобы определить, задаю ли я max_length=2.Однако я не смог ни одного из них.
Может кто-нибудь придумать, в чем может быть причина этой ошибки?

models.py

def dir_path(instance, filename):
    return 'html/{0}/{1}'.format(instance.project, filename)

def idf_path(instance, filename):
    return 'idf/{0}/{1}'.format(instance.project, filename)

def eso_path(instance, filename):
    return 'eso/{0}/{1}'.format(instance.project, filename)

# Create your models here.
class html(models.Model):
    project = models.CharField(max_length=50, blank=True)
    version = models.IntegerField(blank=True,null=True)
    ecms=models.ManyToManyField(ecm, blank=True)
    diff = models.TextField(blank=True)
    PROGRAM_CHOICES = (
        ('---', '---'),
        ('Office', 'General office'),
        ('Residential', 'Residential'),
        ('Retail', 'Retail'),
        ('Restaurant', 'Restaurant'),
        ('Grocery', 'Grocery store'),
        ('Medilcal', 'Hospital'),
        ('Research', 'R&D or laboratory'),
        ('Hotel', 'Hotel'),
        ('Daycare', 'Daycare'),
        ('K-12', 'Educational,K-12'),
        ('Postsecondary', 'Educational,postsecondary'),
        ('Airport', 'Airport'),
        ('DataCenter','Data Center'),
        ('DistributionCenter','Distribution center,warehouse')
    )
    program = models.CharField(max_length=20, choices=PROGRAM_CHOICES, default='---')
    LOCATION_CHOICES = (
        ('---', '---'),
        ('Beijing', 'Beijing'),
        ('China', 'China'),
        ('Hong Kong', 'Hong Kong'),
        ('Japan', 'Japan'),
        ('Shanghai', 'Shanghai'),
        ('Shenzhen', 'Shenzhen'),
        ('Taiwan', 'Taiwan'),
        ('Thailand', 'Thailand'),
        ('USA', 'United States')
    )
    location = models.CharField(max_length=15, choices=LOCATION_CHOICES, default="---")
    CERTIFICATE_CHOICES = (
        ('---', '---'),
        ('LEED_v3', 'LEED_v3'),
        ('LEED_v4', 'LEED_v4'),
        ('BEAM+', 'BEAM+'),
        ('WELL', 'WELL'),
        ('No certificate','No certificate')
    )
    certificate = models.CharField(max_length=20, choices=CERTIFICATE_CHOICES, default="---")
    user = models.CharField(max_length=20, default='---')
    html = models.FileField(upload_to=dir_path)
    idf=models.FileField(upload_to=idf_path)
    uploaded_at = models.DateTimeField(auto_now_add=True)
    good = models.BooleanField(default=False)
    final = models.BooleanField(default=False)
    eso=models.FileField(upload_to=eso_path,blank=True)
    compare = models.BooleanField(default=False)

    def __str__(self):
        return self.project+"_v"+str(self.version)

class timeseries(models.Model):
    html = models.ForeignKey(html, on_delete=models.CASCADE)
    keyword=models.CharField(max_length=50,default='test')
    unit=models.CharField(max_length=20,default='test')
    freq=models.CharField(max_length=20,default='test')
    subcategories = models.TextField(default='test')
    df=models.TextField(default='test')

    @property
    def category(self):
        return self.keyword+" ["+self.unit+"]"

    def __str__(self):
        return str(self.html)+"_"+str(self.keyword)

class area(models.Model):
    html = models.OneToOneField(html, primary_key=True, on_delete=models.CASCADE)
    total_area = models.IntegerField()
    condition_area = models.IntegerField()
    uncondition_area = models.IntegerField()

class unmet(models.Model):
    html = models.OneToOneField(html, primary_key=True, on_delete=models.CASCADE)
    heating = models.FloatField()
    cooling = models.FloatField()
    ashrae = models.FloatField()

    def total_unmet(self):
        return self.heating+self.cooling

class wwr(models.Model):
    html = models.OneToOneField(html, primary_key=True, on_delete=models.CASCADE)
    total = models.FloatField()
    north = models.FloatField()
    east = models.FloatField()
    south = models.FloatField()
    west = models.FloatField()

class energy(models.Model):
    html = models.OneToOneField(html, primary_key=True, on_delete=models.CASCADE)
    total = models.FloatField()
    euipertotal = models.FloatField()
    euipercondition = models.FloatField()

class general(models.Model):
    html = models.OneToOneField(html, primary_key=True, on_delete=models.CASCADE)
    version=models.CharField(max_length=100,default='test')
    weather=models.CharField(max_length=100,default='test')
    lat=models.FloatField()
    lon=models.FloatField()
    elevation=models.FloatField()
    northAngle=models.FloatField()

    def ver_num(self):
        return int(self.version.replace("EnergyPlus, Version ","")[2])

class summary(models.Model):
    html = models.ForeignKey(html, on_delete=models.CASCADE,related_name='summaries')
    keyword = models.CharField(max_length=50, default='test')
    json = models.TextField(default='test')

    def __str__(self):
        return str(self.html)+" / "+str(self.keyword)

class loc(models.Model):
    html = models.OneToOneField(html, primary_key=True, on_delete=models.CASCADE)
    cooling=models.CharField(max_length=100, default='test')
    eui=models.CharField(max_length=100, default='test')
    euicon=models.CharField(max_length=100, default='test')
    energy=models.CharField(max_length=100, default='test')
    fan=models.CharField(max_length=100, default='test')
    glass=models.CharField(max_length=100, default='test')
    heatbal=models.CharField(max_length=100, default='test')
    hvac=models.CharField(max_length=100, default='test')
    hw=models.CharField(max_length=100, default='test')
    light=models.CharField(max_length=100, default='test')
    oa=models.CharField(max_length=100, default='test')
    oamin=models.CharField(max_length=100, default='test')
    opaque=models.CharField(max_length=100, default='test')
    pump=models.CharField(max_length=100, default='test')
    unmet=models.CharField(max_length=100, default='test')
    wwr=models.CharField(max_length=100, default='test')
    wwrcon=models.CharField(max_length=100, default='test')
    zone = models.CharField(max_length=100, default='test')
    #additional attribute (20/8/2017)
    skywwr = models.CharField(max_length=100, default='test',blank=True)
    coilC = models.CharField(max_length=100, default='test',blank=True)
    coilH = models.CharField(max_length=100, default='test',blank=True)
    daylight = models.CharField(max_length=100, default='test',blank=True)
    exLight = models.CharField(max_length=100, default='test',blank=True)
    heating = models.CharField(max_length=100, default='test',blank=True)
    peak = models.CharField(max_length=100, default='test',blank=True)
    peakSub = models.CharField(max_length=100, default='test',blank=True)
    plant = models.CharField(max_length=100, default='test',blank=True)
    #additional attribute(26/8/2017)
    geometry = models.CharField(max_length=100, default='test',blank=True)
    #additional attribute(15/10/2017)
    sysventc = models.CharField(max_length=100, default='test',blank=True)
    sysventh = models.CharField(max_length=100, default='test',blank=True)
    zonevent = models.CharField(max_length=100, default='test',blank=True)
    #additional attribute(20/01/2018)
    zoneeui = models.CharField(max_length=100, default='test',blank=True)
    # additional attribute(201/05/2018)
    load = models.CharField(max_length=100, default='test', blank=True)
    # additional attribute(7/6/2018)
    tariff = models.CharField(max_length=100, default='test', blank=True)
    prmc = models.CharField(max_length=100, default='test', blank=True)
    eneCost = models.CharField(max_length=100, default='test', blank=True)
    eflh = models.CharField(max_length=100, default='test', blank=True)
    setp = models.CharField(max_length=100, default='test', blank=True)

    def __str__(self):
        return str(self.html)

1 Ответ

0 голосов
/ 30 сентября 2018

IMO, это потому, что ваше значение этого поля в базе данных длиннее 2 символов.

Вам необходимо предоставить свой код и то, что находится внутри вашей базы данных.

Кроме того, вы можете установитьmax_length от 2 до большего числа (например, 255), чтобы исключить возможность сомнений.

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