ListView с условием в данных Django - PullRequest
0 голосов
/ 28 февраля 2019

Я новичок в Django, и я хотел бы знать, как я могу создать своего рода фильтр, чтобы только объект появлялся, если он удовлетворяет условию в одном из его атрибутов.Я пытался сделать это с тегами в шаблоне, но это не сработало, и я не знаю, является ли это наиболее эффективным способом.Например, я хотел бы видеть в своей таблице объекты, которые в своем атрибуте «asignar» имеют определенное значение, например, текст «Pedro».Я открыт для предложений, которые не обязательно применяются к меткам.

Models.py:

class reporte_fallo(models.Model):
    num_inventario = models.CharField(max_length=25)
    serie = models.CharField(max_length=25)
    falla = models.TextField()
    descripcion = models.TextField()

    LOAN_STATUS = (
        ('m', 'Maintenance'),
        ('o', 'On loan'),
        ('a', 'Available'),
        ('r', 'Reserved'),
    )

    area = models.CharField(max_length=1,choices=LOAN_STATUS,blank=True)
    fecha = models.DateField(auto_now=False, auto_now_add=True)
    asignar = models.CharField(max_length=20, default=True)
    fecha_comp = models.DateField(default=timezone.now)

View.py:

class reportelist(ListView):
    model = reporte_fallo
    template_name = 'formulario/reporte_list_jefe.html'

Template.html (Это мой шаблон, который не работал с использованием тегов, в данном случае часть "и report.assign ==" Педро "на if, он просто отправляет сообщение" Список пуст ")

    <tbody>
    {% if object_list and reporte.asignar == "Pedro" %} 
    {% for reporte in object_list %}
    <tr>
        <td>{{reporte.id}}</td>
        <td></td>
        <td>{{reporte.falla}}</td>
        <td>{{reporte.fecha}}</td>
        <td>{{reporte.area}}</td>
        <td>{{reporte.asignar}}</td>
        <td>{{reporte.fecha_comp}}</td>
        <td></td>
        <td>
        <a href="{% url 'formulario:reporte_editar' reporte.id %}">Asignar</a>
        <a href="{% url 'formulario:reporte_eliminar' reporte.id %}">Eliminar</a>       
        </td>
    </tr>
    {% endfor %}
    {% else %}
    <h1>The list is empty</h1>
    {% endif%}
</tbody>

Я надеюсь, что ваш ответ очень много!

1 Ответ

0 голосов
/ 28 февраля 2019

В шаблоне условие if должно быть перемещено внутри цикла {% for %}.Что-то вроде:

{% for reporte in object_list %}
{% if reporte.asignar == "Pedro" %} 
    <tr>
        <td>{{reporte.id}}</td>
    </tr>
{% endif %}
{% endfor %}

Если вы хотите видеть только reporte.asignar == "Pedro" объекты, возможно, стоит переопределить набор запросов в представлении :

# views.py
class reportelist(ListView):
    model = reporte_fallo
    template_name = 'formulario/reporte_list_jefe.html'

    def get_queryset(self):
        queryset = super().get_queryset()
        return queryset.filter(asignar='Pedro')

Тогда нет необходимости проверять шаблон:

{% for reporte in object_list %}
    <tr>
        <td>{{reporte.id}}</td>
    </tr>
{% endfor %}
...