我正在使用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')
答案 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