Django外键非托管模型

时间:2014-07-30 19:40:28

标签: django django-models

假设我有这两个简单的模型:

class Employee(models.Model):
    id = models.IntegerField(max_length=9, primary_key=True)
    last_name = models.CharField(max_length=25)

    class Meta:
        db_table = 'employee_view'
        managed = False

class Author(models.Model):
    employee = models.ForeignKey(Employee)

我做了:

e = Employee.objects.get(last_name='Tesla')
<Employee: Tesla>

我应该可以这样做:

a = Author.objects.create(employee=e)

但是我得到了一个完整性错误和非常悲伤:

IntegrityError: (1452, 'Cannot add or update a child row: a foreign key constraint fails (`django_xrdb3`.`publication_author`, CONSTRAINT `employee_id_refs_emp_id_33542a34` FOREIGN KEY (`employee_id`) REFERENCES `employees` (`emp_id`))')

我怀疑它是因为表employees不存在(它实际上是一个视图)。所以FK约束会引发错误。

但是,这应该是可行的。它可以? 我正在使用MySQL,BTW。

提前致谢!!

1 个答案:

答案 0 :(得分:1)

这在MySQL级别是不可能的:
http://dev.mysql.com/doc/refman/5.6/en/innodb-foreign-key-constraints.html
http://dev.mysql.com/doc/refman/5.7/en/view-restrictions.html

基本上,您无法为未编制索引的列创建外键,也无法在视图上创建索引列。

我没试过,但你可以看看这个:
https://code.google.com/p/flexviews/

这是一种在MySQL中创建“物化”视图的方法,作为真正的表,因此您可以使用它作为Django模型的支持,并且可能外键可以工作。