@property
def get_persons(self):
return self.persons_all.all()
from django.db import models
class Job(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
class Person(models.Model):
name = models.CharField(max_length=100)
surname = models.CharField(max_length=100)
job = models.ForeignKey(Job, on_delete=models.SET_NULL, null=True, default=None)
def __str__(self):
return self.name + ' ' + self.surname
from django.shortcuts import render
from django.views.generic.list import ListView
from appname.models import Job, Person
class JobsWithPersonsView(ListView):
queryset = Job.objects.all()
template_name = 'jobs_list.html'
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Jobs</title>
</head>
<body>
{% for job in object_list %}
{{ job.name }}
{% for person in job.person_set.all %}
{{ person.name }} {{ person.surname }}
{% empty %}
Nobody works there.
{% endfor %}
{% empty %}
No jobs.
{% endfor %}
</body>
</html>
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('appname/', include('appname.urls'))
]
from django.urls import path
from appname import views
urlpatterns = [
path('jobslist/', views.JobsWithPersonsView.as_view(), name='jobslist')
]
queryset = Job.objects.filter(name__contains="job")
{% for job in object_list %}
<h1>{{ job.name }}</h1>
{% for person in job.person_set.all %}
{% if person.name|length <= 4 %}
{{ person.name }} {{ person.surname }}
{% endif %}
{% empty %}
Nobody works there.
{% endfor %}