Здесь вам нужен ForeignKey
, который относится к Port
объектам, вместо того, чтобы писать поля типа dest_country
и dest_post
в модели. Это приводит к дублированным данным . Дублированные данные являются антипаттерном, поскольку они затрудняют обслуживание, хранение, извлечение и агрегирование данных.
class Listing(models.Model):
# Port Codes - see https://www.worldnetlogistics.com/seaport-codes/
orig = models.<b>ForeignKey(
'codes.Port'</b>,
on_delete=models.PROTECT,
related_name='listings_as_orig'
<b>)</b>
dest = models.<b>ForeignKey(
'codes.Port'</b>,
on_delete=models.PROTECT,
related_name='listings_as_dest'
<b>)</b>
Тогда вы можете получить
class ListingView(ListView):
model = Listing
queryset = Listing.objects.<b>select_related('orig', 'dest')</b>
template_name = 'listing/home.html'
paginate_by = 16
В шаблоне вы можете например, укажите его в таблице как:
<table>
{% for object in object_list %}
<tr>
<td>{{ object<b>.orig.country_code</b> }}</td>
<td>{{ object<b>.orig.location_code</b> }}</td>
<td>{{ object<b>.orig.name</b> }}</td>
<td>{{ object<b>.dest.country_code</b> }}</td>
<td>{{ object<b>.dest.location_code</b> }}</td>
<td>{{ object<b>.dest.name</b> }}</td>
</tr>
{% endfor %}
</table>