Django外键自动填充基于模型上的另一个字段
问题描述:
因此,我目前有一个“帐户”模型和“帐户评论”模型 - 请记住,我不能真正控制数据库的方案,并且我正在编写一个包装现有的数据库。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管理工作,所以我需要它是模型的一个组成部分。
谢谢,如果有人能指出我在正确的方向。
答
你试图用一个外键做太多。在Django中使用外键后,应返回模型实例,而不是模型实例中的特定字段。
db_column
应该是存储该id的Account
表中的列,例如,
accountComments = models.ForeignKey('accountComments',to_field='accountID',db_column='AccountID')
然后,拿到Data
特定account
情况下,你会怎么做:
account.accountComments.Data
+0
哦,我很愚蠢..是的 - 没有理由为什么我不能将db_column定义为两次相同的事情!我会尽快尝试。 –
Havne't你得到了FK南辕北辙?不应该有多个评论能够与一个帐户相关,反之亦然? – schwobaseggl
我正在从2000 ASP.net迁移,其中所有评论都是一个巨大的文本字符串。所以不行。 –
最终,如果我能够在帐户上创建另一个名为“accountComment”的字段,并将所有现有字段的accountID复制到“accountComment”,并使用外键撤销AccountComment模型__str__返回数据,我发现此工作正常。 我只是觉得必须有一种方法来定义外键查找是基于该模型上的另一个字段。 –