将值添加到View中的queryset后,无法访问Model自定义函数

时间:2019-01-08 11:02:54

标签: django django-models django-templates django-views

我创建了一个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无法正常工作。

1 个答案:

答案 0 :(得分:2)

请勿使用values()!这将返回字典列表,而不是实例的查询集。只需从您的get_queryset方法中返回查询集即可。