【问题标题】:Django 1.8.3 adding ForeignKey for existing databaseDjango 1.8.3 为现有数据库添加外键
【发布时间】:2015-07-11 01:26:17
【问题描述】:

我正在按照 Django 教程 4 为我的 API 资源添加权限。 http://www.django-rest-framework.org/tutorial/4-authentication-and-permissions/

我在 Postgres 中有一个现有数据库,我可以使用 Django API 读取/写入值。现在我想通过 User.auth 添加权限,这需要在 DB 中添加一个额外的列。浏览 API 时出现以下错误:

ProgrammingError at /server/
column server.owner_id does not exist

这是我的服务器模型:

class Server(models.Model):
    discovered = models.BooleanField()
    status = models.SmallIntegerField()
    serialnumber = models.CharField(max_length=100, null=True)
    hostname = models.CharField(max_length=250)
    description = models.CharField(max_length=250, blank=True, null=True)
    created = models.DateTimeField(auto_now_add=True)    
    fk_server_model = models.ForeignKey('ServerModel', db_column='fk_server_model')
    fk_licensing = models.ForeignKey(Licensing, db_column='fk_licensing', blank=True, null=True)
    fk_network_services = models.ForeignKey(NetworkServices, db_column='fk_network_services', blank=True, null=True)
    fk_network_interfaces = models.ForeignKey(NetworkInterfaces, db_column='fk_network_interfaces', blank=True, null=True)
    fk_server_authentication = models.ForeignKey('ServerCredentials', db_column='fk_server_authentication', blank=True, null=True)
    owner = models.ForeignKey('auth.User', related_name='servers')

    def save(self, *args, **kwargs):
        super(Server, self).save(*args, **kwargs)

    class Meta:
        managed = False
        db_table = 'server'

作为教程的一部分,我希望 Django 使用外键字段 owner_id 但在做了以下操作后:

python manage.py syncdb

我的数据库表服务器没有添加字段而不是与 Auth_user 表的外键关系。让 Django 在数据库中自动生成外键的正确方法是什么?我试过了:

python manage.py migrate

结果相似 谢谢

【问题讨论】:

  • 在最新版本的 Django 中,您可能想改用 manage.py migrate - docs.djangoproject.com/en/1.8/topics/migrations
  • auth是你自己定义的一个应用,还是说:owner = models.ForeignKey('django.contrib.auth.models.User', related_name='servers')?
  • auth 只是教程中的复制/粘贴,我使用了 'django.contrib.auth.models.User',现在我得到: ERRORS: api_app.Server.owner: (fields.E300) Field定义与模型 'django.contrib.auth.models.User' 的关系,该模型要么未安装,要么是抽象的。

标签: python django postgresql django-models


【解决方案1】:

我最终在数据库中手动添加了该字段。 owner_id 在我的表中输入 int4 并创建 FK 引用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-07
    • 1970-01-01
    • 2021-06-02
    • 2020-12-07
    • 2011-09-23
    • 1970-01-01
    • 2016-07-03
    • 2021-04-04
    相关资源
    最近更新 更多