gpt4 book ai didi

python - 在 Postgres/PostGIS 中迁移 django 模型没有反射(reflect)

转载 作者:行者123 更新时间:2023-11-29 13:47:02 24 4
gpt4 key购买 nike

我使用 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_atupdated_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_atupdated_at

我做错了什么吗?

最佳答案

问题一定是从您遗留代码中的那一行发生的:managed = False。关于如何解决您的问题,有一些选择:

  1. 简单(干净的)方式:

    既然你可以重建你的数据库并且你没有任何你离不开的东西,那就擦掉所有的东西然后重新来过。

    • 删除迁移文件夹中除 __init__.py 之外的所有内容。
    • 删除您的数据库并重新创建它。
    • ./manage.py makemigrations.
    • ./manage.py migrate.


    好吧,你会失去一切,但这是“清白”的方法。

  2. (可能)更好的方法:

    打开你的最后一次迁移(使用 makemigrations 命令进行的迁移)并手写其余部分:

    # -*- coding: utf-8 -*-
    from __future__ import unicode_literals

    import django.utils.timezone
    from django.db import migrations, models


    class Migration(migrations.Migration):
    dependencies = [
    ('your_app', 'your_previous_migration'),
    ]

    operations = [
    # That takes care of you Meta changes
    migrations.AlterModelOptions(
    name='route',
    options={
    'managed': True,
    'table': 'network_route',
    },
    ),
    # That will add the created_at field
    migrations.AddField(
    model_name='route',
    name='created_at',
    field=models.DateTimeField(
    default=django.utils.timezone.now,
    editable=False
    ),
    ),
    # That will add the updated_at field
    migrations.AddField(
    model_name='route',
    name='updated_at',
    field=models.DateTimeField(blank=True, null=True),
    ]

    现在您可以尝试使用 ./manage.py migrate 进行迁移,应该可以解决问题!

关于python - 在 Postgres/PostGIS 中迁移 django 模型没有反射(reflect),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46678506/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com