Имя поля внешнего ключа Salesforce

В нашем проекте мы используем библиотеку Salesforce в Django. У нас есть класс, который включает в себя сырье:

class SalesforceContact(models.Model): account = models.ForeignKey(SalesforceAccount, models.DO_NOTHING, db_column='AccountId', blank=True, null=True, related_name='contacts')

>class SalesforceContact(models.Model).

Получаем результат all_contacts = SalesforceContact.objects.filter(xxxxxxx).all() атрибуты all_contacts не содержат 'account', но содержат поле 'account_id'.

Это не API, поэтому я не использую сериализаторы.

Я ошибаюсь и есть ошибка? Как я могу изменить имя атрибута?

В Django нормально, что вы видите только внешний ключ в атрибуте "..._id". Если вы смотрите на него по all_contacts[0].__dict__, то вы не видите никакого "счета". Вы можете получить доступ к нему как к целому внешнему объекту по all_contacts[0].account или getattr(all_contacts[0], "account"). В Django это реализовано специальным магическим методом __getattr__, который используется, если обычный атрибут не найден. Это связано с тем, что внешние объекты в Django обычно "лениво оцениваются", когда они действительно нужны, а не изначально, когда загружается основной объект и, возможно, внешний объект не будет использоваться.

Это не является чем-то особенным в django-salesforce или Salesforce. Вы можете прочитать об этом в документации Django. Даже если вы загрузите и основные, и связанные данные вместе методом select_related(), то вы сможете быстро получить доступ к "счету", но и к нему аналогично можно получить доступ под капотом с помощью волшебного метода __getattr__.

Вернуться на верх