【问题标题】:Django heroku connect read-write primary key issueDjango heroku连接读写主键问题
【发布时间】:2020-12-16 17:33:09
【问题描述】:
我正在使用 djagno-heroku-connect 库、salesforce 和 heroku 连接下面的库链接
https://github.com/Thermondo/django-heroku-connect
所以我面临的问题是我有一个标记为读写的模型,那么我应该将哪个字段作为主键,
我不能将 sf_id 设为 pk,因为当我创建一个对象时
不会在那里,因为这是由 salesforce 提供的
按照文档中的建议创建 external_id,但是如果
来自 salesforce 的数据被同步回我的数据库,比如说 postgres
postgres 中有一个 id 字段供 heroku connect 和
它在文档中建议不要使用它
我不愿意为此使用 salesforce API,有什么方法可以做到这一点吗?
提前致谢
【问题讨论】:
标签:
django
heroku
django-models
salesforce
heroku-connect
【解决方案1】:
嘿 Achintya Ranjan Chaudhary!
我的名字是 Rust,我是 django-heroku-connect 的维护者之一。我很乐意在这里为您提供帮助。
您对 sf_id 字段的注释完全正确 - 由于其性质,该字段不能用作主键(它只会由 SF 填充,并且当 object 时不可能在那里有即时值是通过 Python/Django 创建的)。
库对主键没有严格要求,显式定义可以而且应该被忽略,这意味着Django会自动设置默认的主键字段,类似于:
id = models.AutoField(primary_key=True)
这样该字段将映射到Heroku Connect system field id。
这正是我们在 Thermondo 使用我们的库的方式,这完全没问题,但您必须确保您没有在代码中使用此主键。 Heroku Connect 不会保证对象的一致性和顺序,例如,table re-sync 操作会完全改变对象的 id。
作为一个额外的建议,我建议使用 external_uuid UUID 字段,该字段将由 Django(在模型定义上设置默认值)和 Salesforce 自动填充(这将需要自定义触发器来填充 ExternalUUID__c具有生成的 UUID 值的字段)。这将帮助您拥有一个与系统无关的唯一参考 ID,可用于关系或其他相互通信操作。
我希望这对您有所帮助,但请毫无疑问地提出有关此主题的任何其他问题!
最好的,
锈