【问题标题】: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,可用于关系或其他相互通信操作。

    我希望这对您有所帮助,但请毫无疑问地提出有关此主题的任何其他问题!

    最好的,

    【讨论】:

    • 感谢 Rust,您的回答
    猜你喜欢
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 2018-02-19
    • 2011-07-28
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多