【问题标题】:Django - How to remove primary_key attribute from field?Django - 如何从字段中删除 primary_key 属性?
【发布时间】:2015-09-22 22:24:31
【问题描述】:

所以我的数据库中有一个模型,我现在意识到创建主键没有意义。我想从字段中删除主键属性并使用默认的 django 自动字段作为主键。我怎样才能做到这一点?如果我尝试删除 primary_key 属性,它会创建新的 id 字段,但会要求默认值。如果我尝试创建一个新的 id = autofield 它会做同样的事情。

代码如下...

class Textbook(models.Model):
    textbook_name = models.CharField(max_length = 200)
    class_name = models.CharField(max_length = 200)
    author = models.CharField(max_length = 200)
    isbn = models.CharField(max_length = 200)
    auto_id = models.AutoField(primary_key = True)

    @property
    def NumWishes(self):
        return self.wishlist_set.count()
    @property
    def NumPosts(self):
        return self.posting_set.count()
    @property
    def DemSup(self):
        if (self.posting_set.count() != 0):
            showmethemoney = float((self.wishlist_set.count()))/(self.posting_set.count())
        else:
            showmethemoney = 0
        return showmethemoney

    class Meta:
        unique_together = ('class_name', 'isbn')

    def __str__(self):
        return self.textbook_name

最初 isbn 是主键,但我现在想添加一个带有类名的 unique_together 字段,因此我要从 isbn 中删除主键属性。该表目前是空的,这应该会更容易。

谢谢。

【问题讨论】:

  • 我怀疑你可以在不完全删除表格的情况下做到这一点。
  • 那么,注释掉与表有关的所有内容,运行 psql 并删除表,取消注释并生成迁移?
  • 不要认为您需要注释掉任何内容。只需删除 psql 中的表,删除所有现有的迁移,然后再次进行迁移。
  • 好的,谢谢,我试试看。

标签: python django postgresql django-models primary-key


【解决方案1】:

我在 makemigrations 和 migrate 之前尝试过的事情:

-使用命令删除所有表并清除迁移(对我不起作用)

-删除所有表并实际进入迁移文件夹并删除除 init.py 之外的所有内容。 (这行得通)

在 postgresql 数据库中删除表可以通过运行来完成: 删除表“表名”;

我现在在我的应用程序中进行了一次迁移,但一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-09
    • 2021-06-12
    • 2012-12-27
    • 2021-01-04
    • 2019-07-02
    相关资源
    最近更新 更多