这是我在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”时,添加了以下字段:
但是“ off_no_id”应该是STRING,而不是整数(旧版数据)(例如:off_no =“ A001”)。那是因为我删除了仓库中的主键,而现在的迁移却很混乱吗?
我也确实尝试在模型“ route”中添加“ related_name”以解决此问题,但我不确定这是否可行。
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)