2017-02-15 71 views
0

因此,我目前有一個「帳戶」模型和「帳戶評論」模型 - 請記住,我不能真正控制數據庫的方案,並且我正在編寫一個包裝現有的數據庫。Django外鍵自動填充基於模型上的另一個字段

在AccountComments模型下,有一個名爲「Data」的字段。這是AccountComments實際所在的位置,我試圖基本上在Account模型上創建一個外鍵,而實際上不必重新設計並在擁有AccountID的Account上添加「AccountComments」字段。

class Account(models.Model): 
    AccountID = models.AutoField(editable=False, db_column='AccountID', verbose_name='ID', 
          primary_key=True) 
    acctno = models.IntegerField(editable=True, unique=True, db_column='ACCTNO', verbose_name='Acct #', blank=True, 
          null=True) # Field name made lowercase. 
    accountComments = models.ForeignKey('accountComments',to_field='accountID',db_column='Data') 

    def __str__(self): 
     return str(self.acctno) 

    class Meta: 
     managed = False 
     db_table = 'Account' 


class accountComments(models.Model): 
    accountCommentID = models.AutoField(db_column='AccountCommentID', primary_key=True) # Field name made lowercase. 
    accountID = models.IntegerField(db_column='AccountID') # Field name made lowercase. 
    EntryUserID = models.IntegerField(db_column='EntryUserID') # Field name made lowercase. 
    EntryStamp = models.DateTimeField(db_column='EntryStamp',) # Field name made lowercase. 
    Data = models.TextField(db_column='Data') # Field name made lowercase. 
    guid = models.CharField(db_column='guid', max_length=255) # Field name made lowercase. 
    class Meta: 
     managed = False 
     db_table = 'AccountComment' 

最終要在賬戶模式accountComments使用「帳戶ID」做一個查找到accountComments.accountID然後提供回「數據」。

我知道,我可以使用

def accountComments(self): 
    return str(accountComment.objects.get(accountID = self.AccountID).Data) 

,但我想它與Django管理工作,所以我需要它是模型的一個組成部分。

謝謝,如果有人能指出我在正確的方向。

+0

Havne't你得到了FK南轅北轍?不應該有多個評論能夠與一個帳戶相關,反之亦然? – schwobaseggl

+0

我正在從2000 ASP.net遷移,其中所有評論都是一個巨大的文本字符串。所以不行。 –

+0

最終,如果我能夠在帳戶上創建另一個名爲「accountComment」的字段,並將所有現有字段的accountID複製到「accountComment」,並使用外鍵撤銷AccountComment模型__str__返回數據,我發現此工作正常。 我只是覺得必須有一種方法來定義外鍵查找是基於該模型上的另一個字段。 –

回答

0

你試圖用一個外鍵做太多。在Django中使用外鍵後,應返回模型實例,而不是模型實例中的特定字段。

db_column應該是存儲該id的Account表中的列,例如,

accountComments = models.ForeignKey('accountComments',to_field='accountID',db_column='AccountID') 

然後,拿到Data特定account情況下,你會怎麼做:

account.accountComments.Data 
+0

哦,我很愚蠢..是的 - 沒有理由爲什麼我不能將db_column定義爲兩次相同的事情!我會盡快嘗試。 –

相關問題