django-salesforce外键语法

时间:2013-04-22 15:32:35

标签: python django foreign-keys salesforce

我正在使用django-salesforce获取与其关联的联系人(子)和帐户(父)的列表。

在我的models.py中,在Contact类中定义一个字段以保存帐户名称的语法是什么?

这是我的models.py:

from django.db import models
from salesforce.models import SalesforceModel

class Account(SalesforceModel):
    Name = models.CharField(max_length=255)

    def __unicode__(self):
        return u'%s %s' % (self.Name, self.Id)

class Contact(SalesforceModel):
    FirstName = models.CharField(max_length=255)
    LastName = models.CharField(max_length=255)
    AccountId = models.CharField(max_length=255)

    def __unicode__(self):
        return u'%s %s %s' % (self.FirstName, self.LastName, self.AccountId)

我无法找到任何示例,但我认为它看起来像这样:

AccountName = models.ForeignKey(Account, db_column='Name')

2 个答案:

答案 0 :(得分:2)

我是django-salesforce的作者。您不应该做任何 too 特殊的事情来使外键关系工作,尽管您可能需要明确您的密钥名称。这是一个非常简单的示例,可以在源代码tarball中包含的示例应用程序中找到:

class User(SalesforceModel):
    Email = models.CharField(max_length=100)
    LastName = models.CharField(max_length=80)
    FirstName = models.CharField(max_length=40)
    IsActive = models.BooleanField()

class Account(SalesforceModel):
    Owner = models.ForeignKey(User, db_column='OwnerId')

因为默认的Salesforce命名约定与Django不同,所以必须明确告诉它外键字段的名称。否则它将使用附加'_id'的Django约定而不是附加'Id'的SF约定

然后,类似于David的回复中提到的,您可以访问帐户所有者的名字:

a = models.Account.objects.all()[0]
print a.Owner.FirstName

答案 1 :(得分:1)

帐户名不应保存在Contact的字段中,因为它已经保存在帐户中(这是数据库规范化的目的 - 减少冗余)。

相反,您可以使用单个ForeignKey连接它:

class Contact(SalesforceModel):
    FirstName = models.CharField(max_length=255)
    LastName = models.CharField(max_length=255)
    Account = models.ForeignKey(Account)

并从Contact对象c获取帐户名称:

c.Account.Name