Tengo una aplicación de lista de tareas simple donde cada tarea tiene un campo booleano llamado is_deleted. en mi plantilla de lista, solo quiero mostrar las tareas con is_deleted=False .
Sé que puedo usar Task.objects.all().filter(is_deleted=False) en mi opinión; pero quiero hacerlo con gerentes en mi plantilla . aquí está mi gerente:
class TaskManager(models.Manager): def available(self): return self.filter(is_deleted=False) . . objects = TaskManager()aquí está mi vista:
class TaskList(ListView): model = models.Task context_object_name="tasks" template_name = "home/list.html" paginate_by=5y aquí está la condición en mi plantilla:
{% if tasks.available%} ...Mi respuesta es un complemento/una corrección de su trabajo:
tu gerente esta bien
Pero debe especificar en el modelo de tareas que anule el administrador predeterminado por su administrador personalizado de esta manera:
Class Task(models.Model): # others fields here # override the default objects manager objects = TaskManager() # You can also define a new manager and keep the default objects, in the case you will use it later. # objects = models.Manager() -> Task.objects.all() give all objects # is_available = TaskManager() -> Task.is_available.all() give only nt deleted task.en tus vistas.py
class TaskList(ListView): model = models.Task context_object_name="tasks" template_name = "home/list.html" paginate_by=5 # If you override the default objects manager with TaskManager # Then you are nothing to do, {{ tasks }} is the queryset in the template # If you defined two managers as recommended above, then you need # to override the queryset attribute of the ListView queryset = Task.is_available.all() # Explicit call of custom manager De todos modos, en su plantilla, no necesita la etiqueta {% si %} para filtrar los resultados, todas sus tareas están disponibles en el nombre del valor context_object_name .
{% for task in tasks %} {{ task.name }} ... {% endfor %}