как показать детали записи с отношением внешнего ключа - PullRequest
0 голосов
/ 04 февраля 2020

у меня есть эти две модели

class Pv(models.Model):
   IA_System_Code = models.AutoField(primary_key = True)
   IA_code = models.CharField(max_length = 150)
   Date_recieved = models.DateField()
   Pv_reference = models.CharField(unique = True, max_length = 120)
   Payee = models.CharField(max_length=500)
   Description = models.CharField(max_length = 500)

   class Meta():
        ordering = ["-IA_System_Code"]

   def __str__(self):
       return  self.Description

class staff(models.Model):
   staff_id = models.CharField(max_length = 150)
   name = models.CharField(max_length = 300)
   rank = models.CharField(max_length = 300)
   amount = models.DecimalField(max_digits=19, decimal_places=2)
   Pv_reference = models.ForeignKey('Pv',on_delete=models.CASCADE)

   def __str__(self):
   return  self.name

Теперь я хочу иметь возможность нажать кнопку просмотра зарегистрированного PV в таблице, она должна открыть страницу сведений с идентификатором, переданным в arg и соответствующая запись в персонале также должна отображаться в той же подробной форме в виде таблицы

вот моя регистрационная таблица pv html

registedpv. html

  <table id="example2" class="table  table-hover">
          <tr>

          <thead class="thead-light  success">
            <tr>
                <th scope="col">Pv Reference</th>
                <th scope="col">Description</th>
                <th scope="col">IA code</th>
                <th scope="col">Gross Amount(GH&#8373) </th>
                <th scope="col">Tax (GH&#8373) </th>
                <th scope="col">Net Amount (GH&#8373) </th>
                <th scope="col">Accountable impress</th>
                <th scope="col">Status</th>
                <th scope="col"></th>
           </tr>
          </thead>
          <tbody>
              {% for pv in pvs %}
              <tr>
                  <td>{{pv.Pv_reference}}</td>
                  <td>{{pv.Description}}</td>
                  <td>{{pv.IA_code}}</td>
                  <td> {{pv.Gross_amount}} </td>
                  <td> {{pv.Withholding_tax}}</td>
                  <td> {{pv.Net_amount}}</td>
                  <td>{{pv.Acc_Impress}}</td>
                  <td>

                    {% if   pv.Status == 'Completed'  %}
                        <span class="badge bg-success">{{pv.Status}}</span>
                    {% elif pv.Status == 'Returned' %}
                      <span class="badge bg-warning">{{pv.Status}}</span>
                    {% else  %}
                    <span class="badge bg-danger">{{pv.Status}}</span>
                    {% endif %}
                  </td>



                  <td>

                      <a class="btn btn-xs btn-sm accent-white" href="{% url 'pv:pv-detail' 
                      pk=pv.IA_System_Code  %} " style="background-color:gray; color:white;">View</a>

                  </td>


              </tr>
              {% empty %}
               <tr>
                 <td colspan="7" class="text-center ">No Registerd Pvs</td>
               </tr>
              {% endfor %}
          </tbody>

          </table>

теперь вы можете видеть, что есть URL с pk = pv.IA_System_Code в качестве параметра

Отредактировано вот подробности. html

  <div class="col-md-10 mx-auto" >
<!-- general form elements -->
<h3 class=" text-center text-bold">PV DETAILS </h3>
<div class="card ">
  <div class="card-header bg-success">

    <h5> IA SYSTEM CODE :# {{  pvs.IA_System_Code  }}   </h5>
  </div>


    <div class="card-body">
      <div class="col-md-12">
        <dl class="row">
            <dt class="col-sm-3">IA code:</dt>
            <dd class="col-sm-3">{{ pvs.IA_code }}</dd>
            <dt class="col-sm-3">Date recieved:</dt>
            <dd class="col-sm-3">{{ pvs.Date_recieved }}</dd>
            <dt class="col-sm-3">Pv reference:</dt>
            <dd class="col-sm-3">{{ pvs.Pv_reference }}</dd>
            <dt class="col-sm-3">Type of account: </dt>
            <dd class="col-sm-3">{{ pvs.Type_of_accounts  }}</dd>
            <dt class="col-sm-3">Account code:</dt>
            <dd class="col-sm-3">{{ pvs.Account_code }}</dd>
            <dt class="col-sm-3">Source of Funding:</dt>
            <dd class="col-sm-3">{{ pvs.Source_of_Funding }}</dd>
            <dt class="col-sm-3">Cost center:</dt>
            <dd class="col-sm-3">{{ pvs.Cost_center }}</dd>
            <dt class="col-sm-3">Description:</dt>
            <dd class="col-sm-3">{{ pvs.Description }}</dd>

         </dl>
      </div>
        <hr></hr>
      <div class="col-md-12">
        <dl class="row">
            <dt class="col-sm-3">Accountable Impress:</dt>
            <dd class="col-sm-3">{{ pvs.Acc_Impress }}</dd>
            <dt class="col-sm-3">Gross Amount:</dt>
            <dd class="col-sm-3">{{ pvs.Gross_amount }}</dd>
            <dt class="col-sm-3">Status:</dt>
            {% if   pvs.Status == 'Completed'  %}
                <dd class="col-sm-3"><span class="badge bg-success">{{pvs.Status}}</span></dd>
            {% elif pvs.Status == 'Returned' %}
            <dd class="col-sm-3"> <span class="badge bg-warning">{{pvs.Status}}</span></dd>
            {% else  %}
            <dd class="col-sm-3"><span class="badge bg-danger">{{pvs.Status}}</span></dd>
            {% endif %}
            <!-- <dd class="col-sm-3">{{ pvs.Status }}</dd> -->
            <dt class="col-sm-3">Withholding Tax:</dt>
            <dd class="col-sm-3">{{ pvs.Withholding_tax }}</dd>
            <dt class="col-sm-3">Date Returned:</dt>
            <dd class="col-sm-3">{{ pvs.Date_returned }}</dd>
            <dt class="col-sm-3">Net Amount:</dt>
            <dd class="col-sm-3">{{ pvs.Net_amount }}</dd>
            <dt class="col-sm-3">Remarks:</dt>
            <dd class="col-sm-3">{{ pvs.Remarks }}</dd>

       </dl>
       <hr>

       <table class="table table-striped table-sm" id="my_friends">
           <thead>
               <tr>

                   <th>Staff Id</th>
                   <th>Name</th>
                   <th>Rank</th>
                   <th>Amount (GHC)</th>
               </tr>
           </thead>
           <tbody>

           {% for benefit in pvs.staff_set.all %}
           <tr>
               <td>{ benefit.staff_id }}</td>
               <td>{{ benefit.name }}</td>
               <td>{{ benefit.rank }}</td>
               <td>{{ benefit.amount }}</td>
           </tr>
           {% endfor %}
           </tbody>
       </table>
      </div>



    <div class="card-footer text-center ">

          <div class="text-center">
            <a class="btn btn-success  accent-white  " href="{% url 
           'pv:pvupdate' pk=pvs.IA_System_Code  %}">Update Pv</a>
          </div>


    </div>

</div>


</div>

Теперь у меня вопрос: есть ли способ также вытащить все относящиеся данные в модели персонала в таблицу на той же подробной форме? Здесь представлены представления

views.py

#detail page view
class HonDetailView(LoginRequiredMixin,DetailView):
   model = models.Pv 
   template_name = 'pv/detailpv.html'  # state the html file this view class is controling

   context_object_name = 'pvs'

#for the registerd pv
class PvList(LoginRequiredMixin,ListView):
   template_name = 'pv/registeredpv.html' 
   context_object_name ='pvs' 
   model = models.Pv 
   paginate_by = 5 
   today = datetime.datetime.now() 
   queryset = Pv.objects.all().filter(Date_recieved__year=today.year).order_by('-IA_System_Code')

Кажется, я не знаю, что делаю. любая помощь будет высоко ценится.

Ответы [ 2 ]

0 голосов
/ 05 февраля 2020

вместо {% for benefit in pvs.staff_set.all %} я использовал related_name, которое является Pvreference. таким образом, для стало {% for benefit in pvs.Pvreference.all %}

<div class="col-md-12 ">

<h3 class=" text-center text-bold">PV DETAILS </h3>
<div class="card ">
  <div class="card-header bg-success">

    <h5> IA SYSTEM CODE :# {{  pvs.IA_System_Code  }}   </h5>
  </div>


    <div class="card-body">
      <div class="col-md-12">
        <div class="jumbotron">
          <dl class="row">
              <dt class="col-sm-3">IA code:</dt>
              <dd class="col-sm-3">{{ pvs.IA_code }}</dd>
              <dt class="col-sm-3">Date recieved:</dt>
              <dd class="col-sm-3">{{ pvs.Date_recieved }}</dd>
              <dt class="col-sm-3">Pv reference:</dt>
              <dd class="col-sm-3">{{ pvs.Pv_reference }}</dd>
              <dt class="col-sm-3">Type of account: </dt>
              <dd class="col-sm-3">{{ pvs.Type_of_accounts  }}</dd>
              <dt class="col-sm-3">Account code:</dt>
              <dd class="col-sm-3">{{ pvs.Account_code }}</dd>
              <dt class="col-sm-3">Source of Funding:</dt>
              <dd class="col-sm-3">{{ pvs.Source_of_Funding }}</dd>
              <dt class="col-sm-3">Cost center:</dt>
              <dd class="col-sm-3">{{ pvs.Cost_center }}</dd>
              <dt class="col-sm-3">Description:</dt>
              <dd class="col-sm-3">{{ pvs.Description }}</dd>

          </dl>
          <hr></hr>
          <dl class="row">
              <dt class="col-sm-3">Accountable Impress:</dt>
              <dd class="col-sm-3">{{ pvs.Acc_Impress }}</dd>
              <dt class="col-sm-3">Gross Amount:</dt>
              <dd class="col-sm-3">{{ pvs.Gross_amount }}</dd>
              <dt class="col-sm-3">Status:</dt>
              {% if   pvs.Status == 'Completed'  %}
                  <dd class="col-sm-3"><span class="badge bg-success">{{pvs.Status}} 
                                          </span></dd>
              {% elif pvs.Status == 'Returned' %}
              <dd class="col-sm-3"> <span class="badge bg-warning">{{pvs.Status}} 
                                   </span></dd>
              {% else  %}
              <dd class="col-sm-3"><span class="badge bg-danger">{{pvs.Status}}</span> 
              </dd>
              {% endif %}
              <!-- <dd class="col-sm-3">{{ pvs.Status }}</dd> -->
              <dt class="col-sm-3">Withholding Tax:</dt>
              <dd class="col-sm-3">{{ pvs.Withholding_tax }}</dd>
              <dt class="col-sm-3">Date Returned:</dt>
              <dd class="col-sm-3">{{ pvs.Date_returned }}</dd>
              <dt class="col-sm-3">Net Amount:</dt>
              <dd class="col-sm-3">{{ pvs.Net_amount }}</dd>
              <dt class="col-sm-3">Remarks:</dt>
              <dd class="col-sm-3">{{ pvs.Remarks }}</dd>

         </dl>

        </div>
        <div class="col-md-12">

         <hr>

         <table class="table table-striped table-sm" id="my_friends">
             <thead>
                 <tr>

                     <th>Staff Id</th>
                     <th>Name</th>
                     <th>Rank</th>
                     <th>Amount (GHC)</th>
                 </tr>
             </thead>
             <tbody>

             {% for benefit in pvs.Pvreference.all %}
             <tr>
                 <td>{{ benefit.staff_id }}</td>
                 <td>{{ benefit.name }}</td>
                 <td>{{ benefit.rank }}</td>
                 <td>{{ benefit.amount }}</td>
             </tr>
             {% endfor %}
             </tbody>
         </table>
        </div>
        </div>




    <div class="card-footer text-center ">

          <div class="text-center">
            <a class="btn btn-success  accent-white  " href="{% url 'pv:pvupdate' 
             pk=pvs.IA_System_Code  %}">Update Pv</a>
          </div>


    </div>

</div>


</div>

0 голосов
/ 04 февраля 2020

Вы передаете экземпляр PV своему detail.html. Вы можете получить доступ ко всем связанным инстансам сотрудников так:

{% for benefit in pvs.staff_set.all %}
    {{ benefit.staff_id }}
    ... etc
{% endfor %}
...