0

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

2 回答 2

2

我是 django-salesforce 的作者。您不应该做任何特别的事情来使外键关系起作用,尽管您可能需要明确您的键名。这是一个非常简单的示例,可在源 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
于 2013-05-19T23:30:59.100 回答
1

The account name shouldn't be held in a field in Contact, since it's already held in Account (this is the purpose of database normalization- to reduce redundancy).

Instead you would connect it using a single ForeignKey:

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

and get the account name from a Contact object c with:

c.Account.Name
于 2013-04-22T15:40:41.387 回答