Django模型与唯一约束
这是我在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
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
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生成整数主键?