Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django模型与唯一约束_Django_Django Models - Fatal编程技术网

Django模型与唯一约束

Django模型与唯一约束,django,django-models,Django,Django Models,这是我在Django的第一个项目,所有这些数据库建模对我来说都是新概念。对不起,如果我错了 我确实有一个以前的模型在工作。一个区域有多个停车场,一个停车场有多条路线。它们是我无法更改的遗留表 class Region(models.Model): regionnumber = models.IntegerField(db_column='RegionNumber', primary_key=True) engname = models.CharField(db_column='E

这是我在Django的第一个项目,所有这些数据库建模对我来说都是新概念。对不起,如果我错了

我确实有一个以前的模型在工作。一个区域有多个停车场,一个停车场有多条路线。它们是我无法更改的遗留表

class Region(models.Model):
    regionnumber = models.IntegerField(db_column='RegionNumber', primary_key=True)
    engname = models.CharField(db_column='EngName', max_length=15, blank=True, null=True)  

    def __str__(self):
        return self.engname

class Depot(models.Model):
    region = models.ForeignKey(Region, on_delete=models.SET_NULL, null=True)
    depotcode = models.CharField(db_column='DEPOTCODE', primary_key=True)
    depotname = models.CharField(db_column='DEPOTNAME', max_length=50, blank=True, null=True)  

    def __str__(self):
        return self.depotcode + " " + self.depotname

class Route(models.Model):
    reg_no = models.ForeignKey(Region, on_delete=models.SET_NULL, null=True)
    off_no = models.ForeignKey(Depot, on_delete=models.SET_NULL, null=True,)
    res_route = models.CharField(db_column='res_route', max_length=9)   
现在,我需要在这个模型中添加一个日期来跟踪时间的变化(例如:2020年将创建或关闭一些停车场,与停车场中的路线相同)

像这样的

class EvaluationDate(models.Model):
    ev_date = models.DateField(db_column='ev_date', primary_key=True)  # Field name made lowercase.

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

class Region(models.Model):
    regionnumber = models.IntegerField(db_column='RegionNumber', primary_key=True)
    engname = models.CharField(db_column='EngName', max_length=15, blank=True, null=True)  

    def __str__(self):
        return self.engname

class Depot(models.Model):
    region = models.ForeignKey(Region, on_delete=models.SET_NULL, null=True)
    depotcode = models.CharField(db_column='DEPOTCODE', max_length=5, blank=True, null=True)  # Field name made lowercase.
    depotname = models.CharField(db_column='DEPOTNAME', max_length=50, blank=True, null=True)
    eval_date = models.ForeignKey(EvaluationDate, on_delete=models.SET_NULL, null=True)  # Field name made lowercase.

    def __str__(self):
        return self.depotcode + " " + self.depotname

    class Meta:
       constraints = [
            models.UniqueConstraint(fields=['depotcode', 'eval_date'], name='depot_eval_date')
        ]

class Route(models.Model):
    reg_no = models.ForeignKey(Region, on_delete=models.SET_NULL, null=True)
    off_no = models.ForeignKey(Depot, on_delete=models.SET_NULL, null=True,)
    res_route = models.CharField(db_column='res_route', max_length=9)  
    evaluation_date = models.ForeignKey(EvaluationDate, on_delete=models.SET_NULL, null=True)

这有意义吗。这是做事情的好方法吗

现在,当我迁移表“route”时,添加了以下字段:

  • 评估\u日期\u id作为日期
  • 关闭\u no\u id作为INT
  • 注册号为INT
但是“off_no_id”应该是字符串而不是整数(遗留数据)(例如:off_no=“A001”)。这是因为我删除了depot中的主键,而现在迁移变得混乱了吗

我也尝试过在我的模型“路线”中添加“相关的名称”来解决这个问题,但我不确定这是否是解决问题的方法

class Route(models.Model):
    reg_no = models.ForeignKey(Region, on_delete=models.SET_NULL, null=True)
    off_no = models.ForeignKey(Depot, related_name='depotcode', on_delete=models.SET_NULL, null=True,)
    res_route = models.CharField(db_column='res_route', max_length=9)  
    evaluation_date = models.ForeignKey(EvaluationDate, on_delete=models.SET_NULL, null=True)

删除主键时,Django将创建默认id主键,但Django无法更改外键类型,因为它们具有字符串值。我确实删除了数据库并删除了所有迁移。还有什么可以阻止django生成整数主键?