I am new to Django platform. I have a situation where I need to show the data on a page where the table has multiple foreign key columns like status, Priority and task type.when I save the date it saves the ID from the Foreign key table like StatusTable, PriorityTable and TaskTypeTable.The save is working fine as expected.But when I retrieve the date from the table it's giving only the ID not the name. How can i achieve this in Django?
Modle.py
class StatusTable(models.Model):
status = models.CharField(max_length=20,default='')
def __str__(self):
return self.status
class PriorityTable(models.Model):
priority = models.CharField(max_length=20,default='')
def __str__(self):
return self.priority
class TeamTable(models.Model):
team = models.CharField(max_length=20,default='')
def __str__(self):
return self.team
class TaskTypeTable(models.Model):
tasktype = models.CharField(max_length=30,default='')
def __str__(self):
return self.tasktype
class DatacenterTable(models.Model):
datacenter = models.CharField(max_length=10,default='')
def __str__(self):
return self.datacenter
class TaskMaster(models.Model):
sid = models.CharField(max_length=3)
processor = models.ForeignKey(User,null=True)
tasktype = models.ForeignKey(TaskTypeTable, null=True)
task_title = models.TextField(null=True)
task_description = models.TextField(null=True)
datacenter = models.ForeignKey(DatacenterTable,null=True)
priority = models.OneToOneField(PriorityTable, null=True)
status = models.ForeignKey(StatusTable, null=True)
pid = models.IntegerField(null=True)
sourceincident = models.URLField(null=True)
errorincident = models.URLField(null=True)
processingteam = models.ForeignKey(TeamTable, null=True)
createddate = models.DateField(("Date"), default=datetime.date.today)
duedate = models.DateField(("Date"), default=datetime.date.today)
istaskactive = models.BooleanField(default=True)
forms.py
class CreateTaskMaster(forms.Form):
sid = forms.CharField(required=False,widget=forms.TextInput(attrs={'class': 'form-control mr-sm-2', 'placeholder': 'SID'}))
tasktype_query = TaskTypeTable.objects.values_list('tasktype', flat=True).distinct()
tasktype_query_choices = [('', 'Select TaskType')] + [(region, region) for region in tasktype_query]
tasktype = forms.ChoiceField(tasktype_query_choices, required=True,widget=forms.Select(attrs={'class': 'form-control'}))
task_title = forms.CharField(widget=forms.Textarea(attrs={'class': 'form-control mr-sm-2', 'placeholder': 'Task Title', 'rows':4}))
task_description = forms.CharField(widget=forms.Textarea(attrs={'class': 'form-control mr-sm-2', 'placeholder': 'Task Description', 'rows':4}))
datacenter_query = DatacenterTable.objects.values_list('datacenter', flat=True).distinct()
datacenter_query_choices = [('', 'Select datacenter')] + [(region, region) for region in datacenter_query]
datacenter = forms.ChoiceField(datacenter_query_choices, required=True,widget=forms.Select(attrs={'class': 'form-control'}))
priority_query = PriorityTable.objects.values_list('priority', flat=True).distinct()
priority_query_choices = [('', 'Select priority')] + [(region, region) for region in priority_query]
priority = forms.ChoiceField(priority_query_choices, required=True,widget=forms.Select(attrs={'class': 'form-control'}))
sourceincident = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control mr-sm-2', 'placeholder': 'Source Incident URL or NO'}))
processingteam_query = TeamTable.objects.values_list('team', flat=True).distinct()
processingteam_query_choices = [('', 'Select processingteam')] + [(region, region) for region in processingteam_query]
processingteam = forms.ChoiceField(processingteam_query_choices, required=True,widget=forms.Select(attrs={'class': 'form-control'}))
duedate = forms.DateField(widget=forms.TextInput(attrs={'class': 'form-control mr-sm-2', 'placeholder': 'Due Date'}))
views.py
form = CreateTaskMaster()
task_title = TaskMaster.objects.filter()
my_list = [ model_to_dict(x) for x in task_title]
print(my_list)
print(my_list[1]['sid'])
return render(request, 'task/task.html', {'form': form, 'sid':my_list})
whenever you ForeignKey
is used in model it's add Primary Key of that table to record
class TaskMaster(models.Model):
status = models.ForeignKey(StatusTable, null=True)
class StatusTable(models.Model):
status = models.CharField(max_length=20,default='')
def __str__(self):
return self.status
when a new record is added to TaskMaster
the status field require an instance of StatusTable
but when you look at your database the status field is just Integer number (Primary Key of StatusTable
)
if dirctly convert TaskMaster
do dictionary you will get Primary Key (an Number) that's why you need Serializers but for know use this code .
my_list = [ model_to_dict(x)['status'] = x.status.status for x in task_title]
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.