在 django 中创建一个查找

Create a lookup in django

我有一个帐户table,在一个名为帐户

的模型中有帐号和帐户名

如何创建查找,以便每当我在 Django 模板中输入帐号时,帐号名称都会自动填充

我尝试的模型是

class Account(models.Model):
    account_number = models.IntegerField()
    account_name = models.CharField(max_length=50)
    bank_name = models.ForeignKey(Bank, on_delete=models.CASCADE)
    status = models.CharField(max_length=50)

    def __str__(self):
        return account_name

    def get_absolute_url(self):
        return reverse_lazy('accounts')


class AccountLookup(models.Model):
    account_number = models.ForeignKey(Account, on_delete=models.CASCADE):
    account_name = models. ???????????

如果您想要可以在模板中使用的东西,该模板将从 AccountLookup 对象开始呈现帐户名称,那么它

{{accountlookup_instance.account_number.account_name}}

请注意,这将再次访问数据库,除非您在首先获得 AccountLookup 对象的查询集上使用 select_related()

Python 代码同样可以使用这个虚线路径,但有相同的警告。

您可能认为这是一种简化,能够引用看起来像字段(但不是)的内容。在这种情况下,您将其定义为 属性

class AccountLookup(models.Model):
    account_number = models.ForeignKey(Account, on_delete=models.CASCADE)
    ...
    @property
    def account_name(self):
        return self.account_number.account_name

(如果您需要对帐户名称应用一些标准格式以将其转换为在此上下文中更易于阅读的形式,它会更有用)。

顺便说一下,称它为 account_number 会令人困惑。最好只为 ForeignKey 字段命名。 account 在这种情况下:通过外键链接到此对象的帐户对象。是的,它在内部由一个 account_id 表示,它通常是一个整数(自动生成的主键),但这是 Django 程序员不经常关心的低级细节。