Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Using related_name in Django Template

I have two models: Usecase and Usecase_progress. I’m creating a page where I can see a list of all the use cases with their information + the usecase progress for each use case.

Usecase model:

class Usecase(models.Model):
usecase_id = models.CharField(primary_key=True, max_length=20)
usecase_name = models.CharField(max_length=256)
user_email = models.ForeignKey('User', models.DO_NOTHING, db_column='user_email')
usecase_type = models.ForeignKey('UsecaseType', models.DO_NOTHING)
kpi = models.ForeignKey(Kpi, models.DO_NOTHING)
business_owner = models.ForeignKey(BusinessOwner, models.DO_NOTHING)
usecase_description = models.CharField(max_length=5000)
usecase_creation_date = models.DateField()
estimated_date = models.DateField()
usecase_priority = models.CharField(max_length=100)
usecase_git = models.CharField(max_length=512, blank=True, null=True)
current_phase = models.ForeignKey(Phase, models.DO_NOTHING)
delivery_date = models.DateField()
class Meta:
    managed = False
    db_table = 'usecase'

usecase progress model:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

class UsecaseProgress(models.Model):
usecase_progress_date = models.DateTimeField(primary_key=True)
usecase = models.ForeignKey(Usecase, models.DO_NOTHING, related_name='usecaseids')
phase = models.ForeignKey(Phase, models.DO_NOTHING)
pipeline = models.ForeignKey(Pipeline, models.DO_NOTHING)
usecase_progress_value = models.IntegerField()
estimated_date_delivery = models.DateField(db_column='Estimated_Date_Delivery') 

My views.py:

@user_login_required
def view_usecase(request):
     usecase_details = Usecase.objects.all()
     context = {'usecase_details': usecase_details}
     return render(request, 'ViewUsecase.html', context)

My template:

{% extends 'EmpDashboard.html' %}

{% block body %}

{% if usecase_details is not none and usecase_details %}

<div class="col-12 mb-4">
    {% for result in usecase_details %}
    <div class="card border-light shadow-sm components-section  d-flex ">
        <div class="card-body  d-flex ">
            <div class="row mb-4">                 
                <div class="card-body">
                    <div class="row col-12">                            
                    <form>
                        <div class="mb-4">
                            <h6 class="fs-5 fw-bold mb-0 border-bottom pb-3">{{result.usecase_id}} - {{result.usecase_name}}</h6>
                            <div class="mb-0 mt-2">{{result.usecase_description}}</div>                      
                        </div>
                        <div class="form-row mb-4">
                            <div class="col-lg-4 mr-f">
                                <label class="h6" for="exampleFormControlTextarea1">Business Owner:</label>
                                    <div class="mb-0">{{result.business_owner.business_owner_name}}</div>                      
                                </div>
                          <div class="col-lg-4 mr-f">
                            <label class="h6" for="exampleFormControlTextarea1">Owner:</label>
                                <div class="mb-0">{{result.user_email}}</div>                      
                            </div>
                        </div>
                        <div class="form-row mb-4">
                            <div class="col-lg-4 mr-f">
                              <label class="h6" for="exampleFormControlTextarea1">Usecase type:</label>
                                  <div class="mb-0">{{result.usecase_type.usecase_type_name}}</div>                      
                              </div>
                              {% for progress in usecase.usecaseids.all %}
                              <div class="col-lg-4 mr-f">
                              <label class="h6" for="exampleFormControlTextarea1">Progress:</label>
                                  <div class="mb-0">{{progress.usecase_progress_date}}</div>     
                              </div>
                              {% endfor %}
                          </div>
                          <div class="form-row mb-4">
                            <div class="col-lg-4 mr-f">
                              <label class="h6" for="exampleFormControlTextarea1">Usecase creation date:</label>
                                  <div class="mb-0">{{result.usecase_creation_date}}</div>                      
                              </div>
                            <div class="col-lg-4 mr-f">
                              <label class="h6" for="exampleFormControlTextarea1">Estimated date:</label>
                                  <div class="mb-0">{{result.estimated_date}}</div>                      
                              </div>
                          </div>
                          
                      </form>
                  </div>
                </div>
            </div>
        </div>
    </div>
    <br>
    {% endfor %}
</div>

{% endif %}{% endblock %}

Anyway I’m not able to show see the progress date per usecase it’s showing blank row.

>Solution :

Your loop for displaying progress is not good. your variable is named result, not usecase:

{% for progress in result.usecaseids.all %}
    <div class="col-lg-4 mr-f">
        <label class="h6" for="exampleFormControlTextarea1">Progress:</label>
        <div class="mb-0">{{progress.usecase_progress_date}}</div>     
    </div>
{% endfor %}

You can add data prefetching in your view for making SQL join for retrieving all data. If not, Django will make a query for each row.

@user_login_required
def view_usecase(request):
     usecase_details = Usecase.objects.all()
     usecase_details = usecase_details.prefetch_related("usecaseids")
     context = {'usecase_details': usecase_details}
     return render(request, 'ViewUsecase.html', context)
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading