I am trying to hyperlink the rows of the class column of to serve as link to other pages. I read the doc about hyperlinks as well as some posts here such as The linkcolumn about django-tables2. but they don't resolve my problem because from my understanding the link is made by referencing the Pks of a UNIQUE TABLE in each row.
In my situation, the link is made using a different model for each row so I don't know how to reference a pk.
Here is what I have been able to do so far: MAIN PAGE TABLE:
class ClassificationTable(tables.Table):
Class = tables.TemplateColumn('<a href="{{record.extra_details_view}}">{{record.Class}}</a>')
revenue_proportion = tables.Column(gettext_lazy("revenue proportion"),localize= True)
Quantity_of_items = tables.Column(gettext_lazy("quantity of items"),localize= True)
class Meta:
model = Classification
fields = ('Class',
'revenue_proportion',
'Quantity_of_items',
)
template_name = "django_tables2/bootstrap4.html"
here is the html code for the main page:
{% load static %}
{% load i18n %}
{% load django_tables2 %}
class="no-padding-bottom">
<div class="container-fluid">
<div class="row">
<div class="col-lg-8">
{% render_table table %}
</div>
here is the model for classification:
class Classification(models.Model):
Class = models.CharField(max_length=10, primary_key=True)
revenue_proportion = models.FloatField(default=0)
Quantity_of_items = models.IntegerField(default=0)
def __str__(self):
return self.Class
Here are the models used in the other pages:
class class_aa1(models.Model):
Id = models.CharField(max_length=100, primary_key=True, verbose_name= 'items')
revenue_contribution_in_percentage = models.FloatField(default=0, verbose_name= 'value contribution')
margin = models.FloatField(default=0, verbose_name= 'value')
number_of_orders_placed = models.FloatField(default=0, verbose_name= 'number of orders placed')
number_of_sales = models.FloatField(default=0, verbose_name= 'number of sales')
def __str(self):
return self.Id
def extra_details_view(self):
return reverse("exostocksaas.dashboard.classAA1page")
class class_a1(models.Model):
Id = models.CharField(max_length=100, primary_key=True, verbose_name= 'items')
revenue_contribution_in_percentage = models.FloatField(default=0, verbose_name= 'value contribution')
margin = models.FloatField(default=0, verbose_name= 'value')
number_of_orders_placed = models.FloatField(default=0, verbose_name= 'number of orders placed')
number_of_sales = models.FloatField(default=0, verbose_name= 'number of sales')
def __str(self):
return self.Référence
def extra_details_view(self):
return reverse("exostocksaas.dashboard.classA1page")
class class_b1(models.Model):
Id = models.CharField(max_length=100, primary_key=True, verbose_name= 'items')
revenue_contribution_in_percentage = models.FloatField(default=0, verbose_name= 'value contribution')
margin = models.FloatField(default=0, verbose_name= 'value')
number_of_orders_placed = models.FloatField(default=0, verbose_name= 'number of orders placed')
number_of_sales = models.FloatField(default=0, verbose_name= 'number of sales')
def __str(self):
return self.Référence
def extra_details_view(self):
return reverse("exostocksaas.dashboard.classB1page")
class class_c1(models.Model):
Id = models.CharField(max_length=100, primary_key=True, verbose_name= 'items')
revenue_contribution_in_percentage = models.FloatField(default=0, verbose_name= 'value contribution')
margin = models.FloatField(default=0, verbose_name= 'value')
number_of_orders_placed = models.FloatField(default=0, verbose_name= 'number of orders placed')
number_of_sales = models.FloatField(default=0, verbose_name= 'number of sales')
def __str(self):
return self.Référence
def extra_details_view(self):
return reverse("exostocksaas.dashboard.classC1page")
class class_d1(models.Model):
Id = models.CharField(max_length=100, primary_key=True, verbose_name= 'items')
revenue_contribution_in_percentage = models.FloatField(default=0, verbose_name= 'value contribution')
margin = models.FloatField(default=0, verbose_name= 'value')
number_of_orders_placed = models.FloatField(default=0, verbose_name= 'number of orders placed')
number_of_sales = models.FloatField(default=0, verbose_name= 'number of sales')
def __str(self):
return self.Référence
def extra_details_view(self):
return reverse("exostocksaas.dashboard.classD1page")
I am hoping that someone could help me deblock this issue, I am banging my head on it for too long. I would be happy to provide more info if necessary. Cheers
UPDATE: I tryed as suggested in the answer (updated my code), now the rows in the class column are clickable as links but they seem to be calling the same page as nothing change.
here is what I get in the logs:
Traceback (most recent call last):
File "/home/ubuntu/exo/lib/python3.6/site-packages/django/template/base.py", line 849, in _resolve_lookup
(bit, current)) # missing attribute
django.template.base.VariableDoesNotExist: Failed lookup for key [extra_details_view] in <Classification: ClassAA>
DEBUG Exception while resolving variable 'extra_details_view' in template 'dashboard/analytics.html'.
Traceback (most recent call last):
File "/home/ubuntu/exo/lib/python3.6/site-packages/django/template/base.py", line 828, in _resolve_lookup
current = current[bit]
TypeError: 'Classification' object is not subscriptable
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ubuntu/exo/lib/python3.6/site-packages/django/template/base.py", line 836, in _resolve_lookup
current = getattr(current, bit)
AttributeError: 'Classification' object has no attribute 'extra_details_view'
I am not familiar with the suggested technique to reference links, so I am not sure what is happening, someone has a clue?