【问题标题】:how to fix a inherited model?如何修复继承的模型?
【发布时间】:2015-02-16 18:38:41
【问题描述】:

我有一个继承的数据模型:

class Unit (models.Model):
    Name = models.CharField(max_length=50, unique=True, default="DEFAULT VALUE")
    description = models.TextField(null=True)
    address1 = models.CharField(max_length=255, default="DEFAULT VALUE")
    address2 = models.CharField(max_length=255, default="DEFAULT VALUE")
    City = models.CharField(max_length=100, default="DEFAULT VALUE")
    State = models.CharField(max_length=2, default="DEFAULT VALUE")
    zip = models.IntegerField(default=0)
    lat = models.DecimalField(decimal_places=9, max_digits=38, null=True)
    lng = models.DecimalField(decimal_places=9, max_digits=38, null=True)

    def __str__(self):
        return self.Name

    class Meta:
        abstract = True


class Geo (Unit):
    coverage = models.TextField(null=True)

    def __str__(self):
        return self.Name

class Ship (Unit):
    HullNumber = models.TextField(null=True)
    ShipClass = models.ForeignKey(ShipClass)
    Origin = models.CharField(max_length=3, choices=ALLEGIENCE_CHOICES, default='FED')
    Geo = models.ForeignKey(Geo)

问题是如果我执行:

>>> models.Geo._meta.get_all_field_names()
['City', 'Name', 'State', 'address1', 'address2', 'coverage', 'crew', 'description', 'id', 'lat', 'lng', 'ship', 'zip']

但如果我执行:

>>> models.Geo.objects.all()

我明白了:

django.db.utils.OperationalError:没有这样的列:fleet_geo.id

我错过了什么吗?最近两天我一直在做 RTFM。我不知道我错过了什么。有没有人可以对此有所启发?

谢谢

【问题讨论】:

  • 迁移后还会出现这个问题吗?
  • 嗨。赞赏尝试。是的。我已经运行了大约六次 make 迁移和迁移函数。

标签: django django-models foreign-keys django-views django-orm


【解决方案1】:

您的数据库似乎没有设置好,也没有与您的模型保持同步。

如果使用 django 1.7+,您必须运行迁移,以便为您的模型创建/修改数据库表:Activating Models

python manage.py makemigrations
python manage.py migrate

【讨论】:

  • 好的。我只想说我跑了六次....但是因为你说过,那就是它决定工作的时候。魔法。非常感谢寿。至少我知道我离得不远了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-02
  • 1970-01-01
  • 2020-02-04
  • 2012-08-01
  • 1970-01-01
  • 2012-02-17
  • 1970-01-01
相关资源
最近更新 更多