Django:DeferredAttribute 对象/选择字段作为字符串值修改基于 class 的 ListView 中的上下文
Django: DeferredAttribute object / choices field as string value to modify Context in class based ListView
在我的模板中,我想显示一个长名称,但是,我没有在数据库中保存全名,只保存了一个参考编号。
我尝试的解决方案是将 Choices 元组转换为字典
prd_dic = dict(PRODUCTS)
然后我用Key
调用字典中的Value
name = prd_dic['0000']
在我的列表视图中,我修改了上下文以将全名输入到模板中
context['product_name'] = name
当我将一个对象传递到一个地方时,预期会出现一个 KeyError(使用 DeferredAttribute 对象)。
我的问题是,是否有一个内置函数可以解决上面的问题,或者在视图中作为转换和输入上下文的函数,或者直接在模型上进行这种转换?
想法是根据一个键table将保存的号码转换为全名以显示在模板中。
感谢您的一些意见。
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
方法get_product_number_display
是自动为您定义的;您可以直接从模板调用它,无需覆盖 get_context_data
.
在我的模板中,我想显示一个长名称,但是,我没有在数据库中保存全名,只保存了一个参考编号。
我尝试的解决方案是将 Choices 元组转换为字典
prd_dic = dict(PRODUCTS)
然后我用Key
调用字典中的Valuename = prd_dic['0000']
在我的列表视图中,我修改了上下文以将全名输入到模板中
context['product_name'] = name
当我将一个对象传递到一个地方时,预期会出现一个 KeyError(使用 DeferredAttribute 对象)。
我的问题是,是否有一个内置函数可以解决上面的问题,或者在视图中作为转换和输入上下文的函数,或者直接在模型上进行这种转换?
想法是根据一个键table将保存的号码转换为全名以显示在模板中。
感谢您的一些意见。
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
方法get_product_number_display
是自动为您定义的;您可以直接从模板调用它,无需覆盖 get_context_data
.