У меня есть следующие 3 модели:

class Apartament(models.Model):
    Nume = models.CharField(max_length=200)
    Proprietar = models.ForeignKey(User, on_delete=models.CASCADE)
    Judet = models.CharField(max_length=200)
    Oras = models.CharField(max_length=200)
    Strada = models.CharField(max_length=200)
    pub_date = models.DateTimeField('Data inregistrare')

    def __str__(self):
        return self.Nume


class Provideri(models.Model):
    Nume = models.CharField(max_length=200)
    def __str__(self):
        return self.Nume

class Facturi(models.Model):
    Numar = models.CharField(max_length=200)
    Serie = models.CharField(max_length=200)
    Apartament = models.ForeignKey(Apartament, on_delete=models.CASCADE, default='0')
    Provider = models.ForeignKey(Provideri, on_delete=models.CASCADE, default='0')
    Suma = models.DecimalField('Suma de plata', max_digits=5, decimal_places=2)
    DataEmitere = models.DateField('Data emitere')
    DataScadenta = models.DateField('Data scadenta')
    DetaliiFactura = models.TextField('Detalii Factura', help_text="Ce reprezinta factura?")
    def __str__(self):
        return "{} - {} {}".format(self.Provider,self.Serie, self.Numar)

Этот вид:

class DetailView(LoginRequiredMixin, generic.DetailView):
    model = Apartament
    template_name = 'apartament/detail.html'

И этот шаблон:

{% extends "base.html" %}
{% block content %}



{% if apartament.Proprietar == user %}
    <div class="card">
        {% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}

        <div class="card-header">
            {% block title %}{{ apartament.Nume }}{% endblock %}
        </div>
        <div class="card-body">
            <div class="row">
                <div class="col-lg-10">
                    {{facturi}}
                    {% for factura in facturi %}
                        aaaaaaaaaaa<br>
                    {% endfor %}

                </div>
                <div class="col-lg-2">
                    Judet: {{apartament.Judet}}<br>
                    Oras: {{apartament.Oras}}<br>
                    Strada: {{apartament.Strada}}<br>
                </div>
            </div>
        </div>
    </div>
{% else %}


<div class="alert alert-warning" role="alert">
    <h4 class="alert-heading">Apartamentul nu iti apartine</h4>
    <p>
        Cel putin in aplicatie :)
    </p>
</div>

{% endif %}



{% endblock %}

Как я могу показать в моем шаблоне список "Facturi" с запрошенным Apartament_id

Я пытался использовать приведенный выше код, но когда я добавляю {{facturi}} в свой шаблон, ничего не появляется

return Facturi.objects.filter(Apartament_id=Apartament.id)
# also with
facturi = Facturi.objects.filter(Apartament_id=Apartament.id)

Когда я печатаю его, он отображается на моей консоли, но не на шаблоне.

python manage.py runserver 0.0.0.0:8000
Watching for file changes with StatReloader
Performing system checks...

<QuerySet [<Facturi: ENGIE - 123 GAZ>, <Facturi: RDS - 123 RDS>]>
System check identified no issues (0 silenced).
May 27, 2019 - 19:04:10
Django version 2.2.1, using settings 'myHome.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.

Я хотел бы показать в приложении список, содержащий:


1. Facturi: ENGIE - 123 ГАЗ

2. Фактури: РДС - 123 РДС

Из: <QuerySet [<Facturi: ENGIE - 123 GAZ>, <Facturi: RDS - 123 RDS>]> попал на консоль

0
Mihai Domocoş 27 Май 2019 в 20:24

2 ответа

Лучший ответ

Вам нужно добавить facturi в контекст. Добавьте этот метод в ваш класс представления:

def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    context['facturi'] = Facturi.objects.filter(Apartament=Apartament)
    return context

И вам нужно добавить обязательные поля, которые вы хотите показать во время итерации в шаблоне, например поля Numar и Serie:

{% for factura in facturi %}
    {{ factura.Numar }}
    {{ factura.Serie }}
{% endfor %}
1
Sergey Pugach 27 Май 2019 в 17:39

Я думаю, что вам нужно добавить «Facturi» в объект контекста, переданный из представления в шаблон с помощью get_context_data: https://docs.djangoproject.com/en /2.2/ref/class-based-views/mixins-simple/

Так что-то вроде этого:


def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    context['Facturi'] = Facturi.objects.filter(Apartament_id=Apartament.id)
    return context

Тогда вы сможете получить доступ к набору запросов Facturi в шаблоне:

{% for factura in Facturi %}

{% endfor %}
1
lz2313 27 Май 2019 в 17:36