Django模板显示不同的模型字段

时间:2018-05-14 18:09:39

标签: django django-forms django-templates

我试图在模板中的表格中列出少数模型的字段。这些模型由不同的字段连接,如下面的代码段所示:

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 :(得分:0)

我知道有两种方法可以实现它。

首先使用@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 %}模板