access object by foreign key in an html template
Date: April 19th 2016
Last updated: April 23rd 2016
Short reminder how to access a field via a foreign key. Use dot notation.
html template
<div id="profilepage">
<p> {{modelObject.hometown}} </p>
<p> {{modelObject.FK_toCityTable.cityname }},
{{modelObject.FK_toCountryTable.common_name }}
</p>
</div>
EDIT: I have returned to this entry because I had a more complex problem requiring a different solution. In the following example I have extended the builtin Group model with a table called GroupModerator. The goal is to access the field called 'group_status' in the GroupModerator table, via the Group model in an html template.
models.py
The Group model is connected to a GroupModerator table by a foreign key.
class GroupModerator(models.Model):
group_user = models.ForeignKey(User)
group_id = models.ForeignKey(Group)
STATUS = (('Open', 'Open'),('Full', 'Full'),)
group_status = models.CharField(max_length=4, choices=STATUS,default='Open')
views.py
The view gets all groups in the database and sends it to groups.html.
@login_required
def groups(request):
groups_list = Group.objects.all()
context = {'groups_list': groups_list }
return render(request, 'surferprofile/groups.html', context)
groups.html
The problem is that GroupModerator is the one with the foreignkey defined. So how do I get to this table via the Group model? Reminder: I want "group_status" displayed in the table. In this example I am getting the display label, hence the "get_group_status_display" code.
{% for group in groups_list %}
<td> {{group.name}} </td>
<!-- return a count of all users in this group -->
<td> {{ group.user_set.all.count }}</td>
<!-- give me the status of the group -->
<td>
{{ group.groupmoderator_set.all.0.get_group_status_display }}
</td>
</tr>
{% endfor %}