I have the following code in my view and when it is run it does not return the records from the queryset.
def pie_chart(request):
labels = []
data = []
queryset = BBSO_Records.objects.all()
for sos in queryset:
labels.append(sos.observer_department_ID)
data.append(sos.site_location_ID)
print(sos.observer_department_ID)
print("___________________")
print(labels)
return render(request, 'sos/charts/overall_records_chart.html', {
'labels': labels,
'data': data,
})
When I run the code the following line "print(sos.observer_department_ID)" produces this is the console which is correct:
- Maintenance
- Maintenance
- SCM
- Maintenance
- Maintenance
However, when I print the list "print(labels)" the following comes out: [<Observer_Department: Maintenance>, <Observer_Department: Maintenance>, <Observer_Department: SCM>, <Observer_Department:t: Maintenance>, <Observer_Department: Maintenance>, <Observer_Department: Maintenance>]
When what should be produced is: [Maintenance, Maintenance, SCM, Maintenance, Maintenance>, Maintenance]
can someone give provide some guidance as to why this is happening?
UPDATED to include models:
class BBSO_Records(models.Model):
COMPANY_OR_CONTRACTOR = (
('company', 'Company'),
('contractor', 'Contractor'),
)
severityLevel = (
('1', 'Level 1'),
('2', 'Level 2'),
('3', 'Level 3'),
)
severity_level = models.CharField(max_length=6, default= 3 , choices=severityLevel)
date_recorded = models.DateTimeField()
observer_name_ID = models.ForeignKey(get_user_model(), on_delete=models.CASCADE, verbose_name="Observer Name") # i need to double check how I would be handling this.
observer_department_ID = models.ForeignKey(Observer_Department, on_delete=models.CASCADE, verbose_name="Observer Department")
site_location_ID = models.ForeignKey(Site_Locations, on_delete=models.CASCADE, verbose_name='Location of Observation')
location_details = models.CharField(max_length=50, help_text='e.g. In the kitchen on the 4th floor.', blank=True)
company_or_contractor = models.CharField(max_length=10, choices=COMPANY_OR_CONTRACTOR)
number_of_persons_observed = models.IntegerField(default=1, validators=[MinValueValidator(0),
MaxValueValidator(25)],verbose_name='# of Persons Observed') # https://stackoverflow.com/questions/849142/how-to-limit-the-maximum-value-of-a-numeric-field-in-a-django-model
# time_spent = models.IntegerField(verbose_name="Time Spent Observing (mins)", default=True)
PTW = models.CharField(max_length=10, verbose_name="Permit To Work Number", blank=True)
JSA = models.CharField(max_length=10,verbose_name="Job Safety Analysis Number", blank=True)
bbso_title = models.CharField(max_length=100,verbose_name="Title of Observation", help_text='e.g. Contractor Employee not wearing correct PPE for the job (i.e. wrong gloves).')
details_of_observation = models.TextField()
date_created = models.DateTimeField(auto_now_add=True, editable=True) # setting editable equal=False wouldnot make this contorl show on the form
date_updated = models.DateTimeField(auto_now=True, editable=True)
def __str__(self) :
return f'{self.id} - {self.bbso_title}'
def get_absolute_url(self):
return reverse ('bbso_records_detail', args=[str(self.id)])
class Meta:
ordering = ["-date_created"]
verbose_name_plural = "BBSO_Records"
class Site_Locations(models.Model):
location_name = models.CharField(max_length=50,unique=True, verbose_name="Location Name")
def __str__(self):
return self.location_name
def get_absolute_url(self):
return reverse("sitelocations_detail", args=[str(self.id)])
class Meta:
ordering = ["location_name"]
verbose_name_plural = "Site_Locations"
class Observer_Department(models.Model):
department_name = models.CharField(max_length=30, unique=True)
def __str__(self):
return self.department_name
def get_absolute_url(self):
return reverse("observerdepartment_detail", args=[str(self.id)])
class Meta:
ordering = ["department_name"]
verbose_name_plural = "Observer_Department"