假设我有这两个简单的模型:
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约束会引发错误。
提前致谢!!
答案 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模型的支持,并且可能外键可以工作。