【发布时间】:2018-03-22 13:19:48
【问题描述】:
我使用 ogr2ogr 成功地将我的 Geojson 数据导入到 PostGIS。
我运行以下命令:python manage.py inspectdb
class Route(models.Model):
ogc_fid = models.AutoField(primary_key=True)
distance = models.FloatField(blank=True, null=True)
route_type = models.CharField(max_length=-1, blank=True, null=True)
route_long = models.CharField(max_length=-1, blank=True, null=True)
route_name = models.CharField(max_length=-1, blank=True, null=True)
agency_id = models.ForeignKey(max_length=-1, blank=True, null=True)
route_id = models.CharField(max_length=-1, blank=True, null=True)
route_url = models.CharField(max_length=-1, blank=True, null=True)
route_desc = models.CharField(max_length=500, blank=True, null=True)
duration = models.FloatField(blank=True, null=True)
shape_id = models.IntegerField(blank=True, null=True)
route_tcolor = models.CharField(max_length=-1, blank=True, null=True)
route_color = models.CharField(max_length=-1, blank=True, null=True)
wkb_geometry = models.LineStringField(blank=True, null=True)
class Meta:
managed = False
db_table = 'network_route'
当然,我必须将max_length 修改为正整数并将manage 设置为True,所以我这样做了。
我还添加了一个额外的列,created_at 和 updated_at。
产生以下最终模型:
class Route(models.Model):
ogc_fid = models.AutoField(primary_key=True)
distance = models.FloatField(blank=True, null=True)
route_type = models.CharField(max_length=100, blank=True, null=True)
route_long = models.CharField(max_length=200, blank=True, null=True)
route_name = models.CharField(max_length=100, blank=True, null=True)
agency_id = models.ForeignKey(Agency, on_delete=models.CASCADE)
route_id = models.CharField(max_length=100, blank=True, null=True)
route_url = models.CharField(max_length=300, blank=True, null=True)
route_desc = models.CharField(max_length=500, blank=True, null=True)
duration = models.FloatField(blank=True, null=True)
shape_id = models.IntegerField(blank=True, null=True)
route_tcolor = models.CharField(max_length=100, blank=True, null=True)
route_color = models.CharField(max_length=100, blank=True, null=True)
wkb_geometry = models.LineStringField(blank=True, null=True)
created_at = models.DateTimeField(default=timezone.now(),editable=False)
updated_at = models.DateTimeField(blank=True, null=True)
objects = models.GeoManager()
class Meta:
managed = True
db_table = 'network_route'
def save(self, *args, **kwargs):
#On save, update timestamps
if not self.id:
self.created_at = timezone.now()
self.updated_at = timezone.now()
return super(Route, self).save(*args, **kwargs)
def __str__(self):
return self.route_id
我运行:makemigrations [appname],它只检测到 Meta - Change Meta options on route 的变化
如何在模型中添加其他更改,例如 created_at 和 updated_at 被迁移捕获?
我做错了吗?
【问题讨论】:
-
您是否正在尝试更新一些遗留代码?您有必须保存的数据库吗?
-
@JohnMoutafis 很好,是的。但实际上我可以重做这一切,因为我还在设置它。但是,我的问题在于,例如,如果我需要在我的模型中添加另一个字段,我该如何防止重新做一遍?
-
嘿,@Reiion 我想知道,我的回答有帮助吗?你的问题解决了吗?
-
@JohnMoutafis 嘿!对不起,我现在真的要试试了。我今天才能够回到它。
标签: python django postgresql postgis geodjango