I have a data table that creates a row for every Store object. I am using Django 2.1
<tbody>
{% for store in stores %}
<tr id="table-row">
<td><a href="/stores/{{ store.pk }}">{{ store.store_number }}</a></td>
<td><a href="/stores/{{ store.pk }}">{{ store.name }}</a></td>
<td>{{ store.phone }}</td>
<td>{{ store.city }}</td>
<td>{{ store.state }}</td>
{% for circuit in circuits %}
<td>{{ circuit }}</td>
{% endfor %}
<td>{{ store.postal }}</td>
</tr>
{% endfor %}
</tbody>
What I'm wanting to do is create a table column for every circuit where store
is the given store number.
Models:
class Store(models.Model):
store_number = models.IntegerField(default=0000, unique=True)
name = models.CharField(max_length=100)
phone = models.CharField(max_length=15)
xo_tn = models.CharField(max_length=15, null=True)
street_address = models.CharField(max_length=50, null=True)
city = models.CharField(max_length=50, null=True)
state = models.CharField(max_length=50, null=True)
postal = models.CharField(max_length=15, null=True)
timezone = models.CharField(max_length=40, null=True)
date_opened = models.DateField(blank=True, null=True)
date_closed = models.DateField(blank=True, null=True)
def __str__(self):
string = '{0} - {1}'.format(self.store_number, self.name)
return string
def number(self):
return self.store_number
class Circuit(models.Model):
circuit_id = models.CharField(max_length=100)
store = models.ForeignKey(Store, null=True, on_delete=models.SET_NULL)
provider = models.ForeignKey(Provider, blank=True, null=True, on_delete=models.SET_NULL)
configuration = models.ForeignKey(CircuitConfiguration, null=True, on_delete=models.SET_NULL)
registered_on = models.DateTimeField(auto_now=True)
delivered_on = models.DateField(auto_now=True)
is_active = models.BooleanField(default=True)
def __str__(self):
return self.circuit_id
View:
@login_required
def stores(request):
stores = Store.objects.exclude(street_address__contains="closed").all()
context = {
'stores':stores,
}
return render(request, 'all_stores.html', context)
I have not tried much of anything yet, because I'm unsure how I could do this without breaking the relationship or performing the query from my front end.
In django relationship, you can use reverse accessor. See this document.
In your case, your template code will be:
<tbody>
{% for store in stores %}
<tr id="table-row">
<td><a href="/stores/{{ store.pk }}">{{ store.store_number }}</a></td>
<td><a href="/stores/{{ store.pk }}">{{ store.name }}</a></td>
<td>{{ store.phone }}</td>
<td>{{ store.city }}</td>
<td>{{ store.state }}</td>
{% for circuit in store.circuit_set.all %}
<td>{{ circuit }}</td>
{% endfor %}
<td>{{ store.postal }}</td>
</tr>
{% endfor %}
</tbody>
See this question also.