Создание поиска в 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.