Django外键根据模型

时间:2017-02-15 12:27:15

标签: python django django-models

所以我目前有一个“帐户”模型和“帐户评论”模型 - 请记住,我无法真正控制数据库的方案,我正在编写现有数据库的包装。

在AccountComments模型下,有一个名为“数据”的字段。这是AccountComments实际上的位置,我正在尝试基本上在帐户模型上创建外键,而不必实际重新设计并在持有AccountID的帐户上添加“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使用“AccountID”对accountComments.accountID进行查找,然后提供“数据”。

我知道我可以使用

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

但是我想让它与Django Admin一起使用,所以我需要它作为模型的集成部分。

谢谢,如果有人能指出我正确的方向。

1 个答案:

答案 0 :(得分:0)

您尝试使用外键做太多事情。在Django中的外键后面应该返回模型实例,而不是模型实例中的特定字段。

db_column应该是Account表中存储id的列,例如。

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

然后,要获取特定Data实例的account,您可以这样做:

account.accountComments.Data