小编Joe*_*ini的帖子

Django - 如何防止数据库外键约束创建

我有一个由数据库视图支持的模型.

class OrgCode(models.Model):
    org_code                = models.CharField(db_column=u'code',max_length=15) 
    org_description         = models.CharField(max_length=250)
    org_level_num           = models.IntegerField()

    class Meta:
        db_table = u'view_FSS_ORG_PROFILE'
Run Code Online (Sandbox Code Playgroud)

我需要在另一个模型中引用它

class AssessmentLocation(models.Model):
    name                = models.CharField(max_length=150)
    org                 = models.ForeignKey(OrgCode)
Run Code Online (Sandbox Code Playgroud)

我无法运行syncdb,因为无法创建引用视图的外键约束.

 u"Foreign key 'FK__main_asse__org__1D114BD1' 
 references object 'view_FSS_ORG_PROFILE' 
 which is not a user table.", None, 0, -214
7217900), None)
Command:
CREATE TABLE [main_assessmentlocation] (
    [id] int IDENTITY (1, 1) NOT NULL PRIMARY KEY,
    [name] nvarchar(150) NOT NULL,
    [org] int NOT NULL REFERENCES [view_FSS_ORG_PROFILE] ([id]),
)
Run Code Online (Sandbox Code Playgroud)

解决方法是取出指向视图的Meta:db_table,让sync db创建OrgCode表,然后将meta:db_table放回syncdb之后.

有没有办法防止为某些模型或字段创建外键约束?

更新:我在相关模型中添加了一个静态方法,表明它是一个视图

class OrgCode(models.Model):
    org_code                = models.CharField(max_length=15) …
Run Code Online (Sandbox Code Playgroud)

django django-models django-mssql

9
推荐指数
1
解决办法
8918
查看次数

标签 统计

django ×1

django-models ×1

django-mssql ×1