Шаблон Django отображает поля разных моделей - PullRequest
0 голосов
/ 14 мая 2018

Я пытаюсь перечислить поля из нескольких моделей в таблице в шаблоне.Модели объединяются различными полями, как показано ниже:

models.py:

class Client(models.Model):
    clientID = models.IntegerField(primary_key=True)
    firstName = models.CharField(max_length=30)
    lastName = models.CharField(max_length=50)
    pesel = models.CharField(max_length=11)

    @property
    def loan(self):
        return self.loan_set.all().first()

class Loan(models.Model):
    clientID = models.ForeignKey(Client, on_delete=models.CASCADE)
    loanNo = models.CharField(max_length=10)

class Case(models.Model):
    loanID = models.ForeignKey(Loan, on_delete=models.CASCADE)
    caseID = models.CharField(max_length=30, primary_key=True)
    callForPaymentDate = models.DateField(default=None)

class Phase(models.Model):
    caseID = models.ForeignKey(Case, on_delete=models.CASCADE)
    phaseTypeID = models.ForeignKey(PhaseType, on_delete=models.CASCADE)
    courtID = models.TextField(max_length=200)

class PhaseDetail(models.Model):
    caseID = models.ForeignKey(Case, on_delete=models.CASCADE)
    phaseTypeID = models.ForeignKey(PhaseType, on_delete=models.CASCADE)
    dismissalDate = models.DateField(default=None, blank=True, null=True)

Как вы видите выше, модели соединены ForeignKey.Как передать эти модели в представление (views.py ниже):

def index(request):
    clients = Client.objects.all()
    cases = Case.objects.all()
    phasedetails = PhaseDetail.objects.all()
    phases = Phase.objects.all()
    loans = Loan.objects.all()
    return render(request, 'erepertorium/index.html', 
                  {'clients': clients, 'cases': cases, 'phasedetails': phasedetails, 
                   'phases': phases, 'loans': loans})

, чтобы я мог отображать поля разных моделей, но соответствующие этому ForeignKey?См. Ниже html-шаблон:

    <table id="case_list" class="display">
        <thead>
        <tr>
            <td>Sygnatura wg Powoda</td>
            <td>Sygnatura EPU</td>
            <td>PESEL</td>
            <td>Numer pożyczki</td>
            <td>Imię i nazwisko</td>
        </tr>
        </thead>
        <tbody>
        <tr></tr>
        {% for c in clients %}
        <tr>
            <td>{{ c.case.caseID }}</td>
            <td>2</td>
            <td>{{ c.pesel }}</td>
            <td>{{ c.loan.loanNo }}</td>
            <td>{{ c.firstName }}&nbsp;{{ c.lastName }}</td>
        </tr>
        {% endfor %}
        </tbody>
    </table>

Я читал некоторые решения о представлениях на основе классов и т. Д., Но некоторые решения потребовали бы перестройки всей модели (более 200 строк кода).Поэтому, прежде чем я это сделаю, я бы хотел попросить помощи у сообщества.

1 Ответ

0 голосов
/ 14 мая 2018

Я знаю два способа, которыми вы можете достичь этого.

Сначала с @property:

class Client(models.Model):
    clientID = models.IntegerField(primary_key=True)
    firstName = models.CharField(max_length=30)
    lastName = models.CharField(max_length=50)


    @property
    def loan(self):
        return self.loan_set.all().first()

шаблон будет:

  <td>{{ c.loan.loanNo }}</td>

или

в шаблоне, доступ к нему осуществляется по обратной связи

  <td>{{ c.loan_set.all.0.loanNo }}</td>

Убедитесь, что до reverse relation экземпляру принадлежит отношение. с if self.loan_set.all() ( Модель ) | {% if c.loan_set.all %} ( Шаблон )

...