В моем шаблоне я хотел бы отобразить длинное имя, однако я не сохраняю полное имя в базе данных, только ссылочный номер.
Моя попытка решить проблему - преобразовать кортеж Choices в словарь
prd_dic = dict(PRODUCTS)
Затем я называю Значение в словаре Ключом
name = prd_dic['0000']
В моем представлении списка я изменяю контекст для подачи полного имени в шаблон
context['product_name'] = name
Когда я передаю объект в место, где ожидается строка, возникает KeyError (с использованием объекта DeferredAttribute).
У меня вопрос: есть ли встроенная функция, которую нужно решить выше, либо в представлении, как функции для преобразования и подачи в контекст, либо как непосредственное преобразование в модели?
Идея состоит в том, чтобы преобразовать сохраненное число в полное имя в соответствии с таблицей ключей для отображения в шаблоне.
Благодарен за некоторый вклад.
PRODUCTS = (
('0000' , 'Hamburger'),
('1111' , 'Pizza')
)
class Product(models.Model):
product_number = models.CharField(max_length=20,choices=PRODUCTS, blank=True, null=True)
class ProductListView(ListView):
model = Product
template_name = 'product/product_list.html'
def get_context_data(self, **kwargs):
context = super(ProductListView, self).get_context_data(**kwargs)
prd_obj = Product.product_number # this is an object
prd_dic = dict(PRODUCTS)
name = prd_dic[prd_obj] # a single string, prd_dic['0000'] works in template
context['product_name'] = name
return context