我有一个非托管模型客户端
class Client(models.Model):
client_id = models.IntegerField('ID', primary_key=True)
name = models.CharField()
class meta:
manage = False
我使用Client
扩展User
:
class Account(models.Model):
user = models.OneToOneField(User)
client = models.OneToOneField(Client, to_field='client_id')
我认为,由于Client.client_id
模型的定义,即使没有明确的Client.id
,Django也会创建to_field='client_id'
而不是Client
的外键引用。但sqlmigrate
显示:
BEGIN;
CREATE TABLE `pubsite_account` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `deg_client_id` integer NOT NULL UNIQUE, `user_id` integer NOT NULL UNIQUE);
ALTER TABLE `pubsite_account` ADD CONSTRAINT pubsite_account_deg_client_id_73086fddd308cd6f_fk_Clients_id FOREIGN KEY (`deg_client_id`) REFERENCES `Clients` (`id`);
ALTER TABLE `pubsite_account` ADD CONSTRAINT pubsite_account_user_id_33ed558985f73b32_fk_auth_user_id FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`);
COMMIT;
设置to_field='client_id'
时没有任何变化。任何想法都将不胜感激。
答案 0 :(得分:0)
我现在无法尝试,但我认为db_column
正是您所寻找的
client = models.OneToOneField(Client, db_column='client_id')
答案 1 :(得分:0)
在#django-dev中讨论后,结果证明是bug。
在打开故障单时,开发人员 MarkusH 提供临时解决方法:
managed = False
更改为=True
'managed': False
添加到CreateModel操作中的options数组。-------编辑---------
从故障单页面,此错误已得到修复。所以,如果你来这里做同样的事情,只需更新Django。