2013-04-22 31 views
0

我使用django-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') 

回答

1

帳戶名不應該被保存在Contact的字段中,因爲它已經保存在Account中(這是數據庫規範化的目的 - 減少冗餘)。從Contact對象c

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

,並獲得帳戶名稱:Django的銷售團隊的

c.Account.Name 
+0

謝謝,這個答案是有道理的,它似乎是它應該的工作方式。當我嘗試這個時,我得到一個錯誤: 實體'聯繫'上沒有這樣的列'Account_id'。如果您嘗試使用自定義字段,請務必在自定義字段名稱後面追加'__c'。 – user2262804 2013-04-22 17:22:33

+0

你在哪一行發生錯誤? – 2013-04-22 17:47:45

+0

嗨,這發生在我manage.py shell時: >>> c = Contact.objects.all() >>> c [0] 我相信發生了什麼是django正在追加_id帳戶。 – user2262804 2013-04-23 14:51:07

2

我是作者

相反,你會使用一個ForeignKey連接。你不應該做任何事情特別使外鍵關係工作,雖然你可能需要明確你的關鍵名稱。這裏是一個非常簡單的例子,在包含在源碼包中的示例應用程序中發現:

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 
+0

我正在編寫基於源代碼tarball中的測試的測試。我列出了用戶模型。當我添加帳戶模型時,出現以下錯誤:django.db.utils.DatabaseError:(1075,'不正確的表定義;只能有一個自動列,它必須定義爲一個鍵')。我在想,也許DATABASES設置導致了這個問題。我有兩個數據庫'default':'ENGINE''django.db.backends.mysql'和'salesforce':'ENGINE''salesforce.backend'。你是否認爲Django正在看到'默認',並試圖將MySQL約束應用到Salesforce表中? – user2262804 2013-11-14 16:52:03

+0

我需要更多的信息才能確定,但​​對我來說這聽起來像是一個無效的模型,可能會添加一個重複的字段來表示Salesforce上的「Id」字段。當您從SalesforceModel繼承時,您不需要指定主鍵,因爲它會自動添加大多數SFDC模型通用的默認「Id」字段。 – 2014-07-15 20:35:14