I'm trying my hand at DRF recently and I've got this issue below to be solved for my project.
I've two Models
class JobsMaster(models.Model):
job_id = models.CharField(max_length=128, unique=True)
job_name = models.CharField(max_length=128)
scheduled_time = models.CharField(max_length=128)
args = models.TextField()
interval = models.CharField(max_length=50)
repeat = models.CharField(max_length=100)
class JobProcessDetails(models.Model):
job_id = models.ForeignKey('JobsMaster')
sequence = models.IntegerField()
step_name = models.CharField(max_length=128)
records = models.IntegerField(null=True,blank=True)
created_by = models.CharField(max_length=155,default='system')
created_on = models.DateTimeField(auto_now_add=True)
class Meta:
unique_together = (('job_id', 'sequence'),)
Corresponding Serializers
class JobsMasterSerializer(serializers.ModelSerializer):
class Meta:
model = JobsMaster
fields = '__all__'
class JobProcessDetailsSerializer(serializers.ModelSerializer):
class Meta:
model = JobProcessDetails
fields = '__all__'
their Viewsets
class JobsMasterViewSet(viewsets.ModelViewSet):
queryset = JobsMaster.objects.all()
serializer_class = JobsMasterSerializer
filter_fields = ('job_id',)
class JobProcessDetailsViewSet(viewsets.ModelViewSet):
queryset = JobProcessDetails.objects.all()
serializer_class = JobProcessDetailsSerializer
filter_fields = ('job_id','sequence',)
I do not know if this is the right way to build viewsets and serializer but it worked for me.
I want to write a GET request from UI to fetch the data from JobProcessDetails
which includes the data from the related JobsMaster
table as well.
for example, the response data should be containing the below fields
job_id : xxxxx
sequence : xxxx
step_name : 'xxxx'
records : xxxx
created_by : 'xxxxx'
created_on : dd/mm/yyyy
job_id__job_name : 'xxxxx'
job_id__scheduled_time : 'xxxxx'
job_id__args : 'xxxxx'
job_id__interval : 'xxxxx'
job_id__repeat : 'xxxxx'
Is there any way that I can tweak something to get this with a single GET request.
try like this
class JobProcessDetailsSerializer(serializers.ModelSerializer):
job_id = JobsMasterSerializer(read_only=True)
class Meta:
model = JobProcessDetails
fields = [
'job_id '
'sequence'
'step_name'
'records'
'created_by'
'created_on'
]