Я использую ListView для вывода списка некоторых объектов из модели. Я хочу выделить записи в отображаемом списке, где указанный элемент был создан текущим пользователем, и я планирую сделать это с помощью небольшой цветной точки (кружка), созданной с использованием CSS. Вот тестовый пример.
# models.py
from django.db import models
from django.contrib.auth.models import User
class Foo(models.Model):
created_by = models.ForeignKey(
User,
to_field='username',
on_delete=models.PROTECT,
related_name='foos_as_usernames',
blank=False
)
stuff = models.CharField(max_length=128, blank=True)
#views.py
from django.views.generic import ListView
class FooListView(ListView):
model = Foo
def get_context_data(self, **kwargs):
context = super(FooListView, self).get_context_data(**kwargs)
# Here I want to conditionally set a dot_class attribute based on
# comparing Foo.created_by with the current user, i.e.
# if object.created_by == user:
# object.dot_class = 'its-me'
# What do I add here to create the dot_class attribute in the object_list?
# Is there some other way I can pass a list to the foo_list.html template?
return context
# foo_list.html
{% load static %}
<!DOCTYPE html>
<html>
<head>
<title>FooBar</title>
<style>
.its-me { height: 8px; width: 8px; background-color: dodgerblue; border-radius: 50%; display: inline-block; }
</style>
</head>
<body>
<table>
<tr>
<th> </th>
<th>Stuff</th>
</tr>
{% for obj in object_list %}
<tr>
<td><span class="{{ obj.dot_class }}"></span></td>
<td>{{ obj.stuff }}</td>
</tr>
{% endfor %}
</table>
</body>
По ряду причин мне нужно сделать это в CBV, а не аннотировать объекты в модели.
Как я могу добавить атрибут к объектам в контексте object_list? Или как передать список в свой шаблон?
Спасибо и всего наилучшего ... Пол