Создание поиска в django

У меня есть таблица счетов с номером счета и названием счета в модели под названием счета

как создать поиск, чтобы при вводе номера счета в шаблоне 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}}

Обратите внимание, что это снова ударит по БД, если только вы не использовали select_related() в наборе запросов, который получил объект(ы) AccountLookup в первую очередь.

Код 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 В данном случае: объект счета, связанный ForeignKey с этим объектом. Да, внутренне он представлен account_id, который обычно является целым числом (автоматически генерируемый первичный ключ), но это деталь низкого уровня, которая не часто волнует программистов Django.

Вернуться на верх