Here’s my models
class Robot(models.Model):
robot = models.CharField(max_length=100)
short_Description = models.CharField(max_length=200)
status = models.CharField(max_length=20)
parameter = models.CharField(max_length=200)
jenkins_job = models.CharField(max_length=100, default='JenkinsJobName')
jenkins_token = models.CharField(max_length=100, default='JenkinsToken')
jenkins_build = models.CharField(max_length=10, default=0)
jenkins_build_status = models.CharField(max_length=20, default="Never Run")
def __str__(self):
return self.robot
class jenkinsHistory(models.Model):
robotName = models.ForeignKey(Robot, on_delete=models.CASCADE, blank=True, null=True)
jenkinsBuildNumber = models.CharField(max_length=100,blank=True)
jenkinsBuildStatus = models.CharField(max_length=200,blank=True)
errorMsg = models.CharField(max_length=500,blank=True)
Param = models.CharField(max_length=500,blank=True, null=True)
def __str__(self):
return self.robotName
I have assign data in jenkinsHistory table from Robot table. here’s the code that how i assign the data
def Run_data(Request,id):
if Request.method == 'POST':
pi = Robot.objects.get(pk=id)
hist = jenkinsHistory(robotName= pi,jenkinsBuildStatus='Jenkins-Running')
hist.save()
now i want to show that data in a table in my UI. so that i have written this view
def Robot_History(Request,id):
fm = list(jenkinsHistory.objects.values('id','robotName','jenkinsBuildNumber','jenkinsBuildStatus','errorMsg','Param').filter(robotName=id))
print("hello",fm)
rob = Robot.objects.all()
return render(Request, 'hello/robotHistory.html',{'jenkinsHistory': fm,'robot': rob})
and here’s my html
{% for hist in jenkinsHistory %}
<tbody>
<tr>
<td>{{hist.id}}</td>
<td>{{hist.robotName}}</td>
<td>{{hist.jenkinsBuildNumber}}</td>
<td>{{hist.jenkinsBuildStatus}}</td>
<td>{{hist.errorMsg}}</td>
<td>{{hist.Param}}</td>
</tr>
</tbody>
{% endfor %}
But when i got the data the foreign key field coming as a id not string

but in my django admin it is coming as a string only

how to solve that issue?
Advertisement
Answer
You can use robotName__robot in your values call:
jenkinsHistory.objects.values(..., 'robotName__robot',...)
and use that same field in your template:
{{ hist.robotName__robot }}
While at it, I suggest you change jenkinsHistory‘s robotName field to just robot, as this pertains to the foreign key (or Robot object) and not just the name. This will help make your code less confusing and more readable.