【发布时间】: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