Вызов функции Django с аргументом в HTML - PullRequest
0 голосов
/ 14 сентября 2018

Я довольно новичок в django и пытаюсь вызвать функцию django в html для отображения количества объектов Akte в соответствующем объекте Charge, но почему-то мне не хватает правильного способа сделать это.

models.py: 
class Charge(models.Model):
    STATI = (
    ('O','Offen'),
    ('G','Geschlossen'),
    )
"Projektnr = models.CharField(max_length=30)"
Containernr = models.CharField(max_length=30)
Plombennr = models.CharField(max_length=30)
status = models.CharField(max_length=1, choices=STATI)
def __str__(self):
    return self.Containernr


class Akte(models.Model):
Aktenbarcode = models.CharField(max_length=30)
"Eincheckdatum = models.datetime()"
user = models.CharField(max_length=30)
containerId = models.ForeignKey(Charge,on_delete=models.CASCADE)
kundennr = models.CharField(max_length=30) 
Startdatum = models.DateField(auto_now_add=True)
def __str__(self):
    return self.Aktenbarcode

и это мои views.py:

def tabelle(request):
assert isinstance(request, HttpRequest)
charge_list = Charge.objects.all()

return render(
    request,
    'app/tabelle.html',
    {

        'charge_list':charge_list,


    }
)

def anzahl(containernr):
    return {'anzahl': Akte.objects.filter(containerId__Containernr==containernr).count }

и вот HTML-код:

{% extends "app/ats.html" %}

{% block content %}
{% if not user.is_anonymous %}
<div style="margin-left:10%;color:white;"><a style="color:white"href="{%      url 'home'%}">Home</a> ><a style="color:white"> Tabellenübersicht</a></div>
<div>
<table>
    <tr>
        <th>Containernummer</th>
        <th>Status</th>
        <th>Anzahl Akten</th>
        <th>Plombennummer</th>            
        <th></th>     
    </tr>
    {%for Charge in charge_list%}
    <tr>
        <td>{{Charge.Containernr}}</td>
        <td>{{Charge.status}}</td>
        <td>{% anzahl Charge.Containernr %}</td>
        <td>{{Charge.Plombennr}}</td>
</tr>
    {% endfor %}
    </table>

 </div>

 {% endif %}    

{% endblock %}

когда я пытаюсь это сделать, я всегда получаю эту ошибку: TemplateSyntaxError at / tabelle

Недопустимый тег блока в строке 19: «anzahl (Charge.Containernr)», ожидаемый «пустой» или «endfor». Вы забыли зарегистрироваться или загрузить этот тег?

как правильно решить эту проблему?

1 Ответ

0 голосов
/ 14 сентября 2018

Вы не можете вызывать методы с аргументами в шаблоне. Но вам не нужно здесь; чтобы получить количество Акте для этого заряда, вы можете сделать:

{{ Charge.akte_set.count }}

Еще лучший и гораздо более эффективный подход - получить эти данные в исходном запросе с помощью аннотации:

from django.db.models import Count
def tabelle(request):
    charge_list = Charge.objects.all().annotate(akte_count=Count('akte'))

и теперь в вашем шаблоне вы можете сделать:

{{ Charge.akte_count }}
...