我创建了一个Product模型并添加了一个自定义def get_status_class来根据状态管理徽章的css类,如果我在queryset中使用all()但在将.values()与某些特定字段一起使用后,它将起作用。 / p>
Model.py
class Product(models.Model):
PRODUCT_STATUS = (
('Planning','Planning'),
('In Progress','In Progress'),
('Final','Final'),
)
status = models.CharField(max_length=20,choices=PRODUCT_STATUS)
def get_absolute_url(self):
return reverse('products:product_detail',kwargs={'pk':self.pk})
def get_status_class(self):
status_class = ""
if self.status == "Planning":
status_class = "primary"
elif self.status == "In Progress":
status_class = "secondary"
elif self.status == "Final":
status_class = "success"
return status_class
def __str__(self):
return self.title
View.Py
class ProductListView(LoginRequiredMixin,ListView):
model = Product
def get_queryset(self):
queryset = Product.objects.all().order_by(self.order_by)
return queryset.values('status')
Template.py
<span class="badge badge-pill badge-{{product.get_status_class}}">{{ product.status }}</span>
如果我在queryset中添加.values('status'),则product.get_status_class无法正常工作。
答案 0 :(得分:2)
请勿使用values()
!这将返回字典列表,而不是实例的查询集。只需从您的get_queryset
方法中返回查询集即可。