I just need to apply right join with query set.
vdata = (VisVisitData.objects.
.select_related('vpvalue','vparameter')
.filter(vpvalue__vparameter=9,)
.values(name=F('vpvalue__parameter_value'),
visit_day=F('visit__visit_day'),
question=F('vparameter'),
value_id=F('vpvalue'))
.annotate(data=Count('vpvalue_id'))
.order_by('visit__visit_day'))
above code generate following join statement.
FROM
vis_visit_data
INNER JOINvis_visit_parameter_values
ON (vis_visit_data
.vpvalue_id
=vis_visit_parameter_values
.vpvalue_id
) LEFT OUTER JOINvis_visits
ON (vis_visit_data
.visit_id
=vis_visits
.visit_id
)
But I need to do right join instead of Inner Join with vis_visit_parameter_values
and vis_visit_data
table. below is the snapshot of sql in which I want to make changes.
INNER JOIN
vis_visit_parameter_values
ON (vis_visit_data
.vpvalue_id
=vis_visit_parameter_values
.vpvalue_id
)
Model classes (using these 3 models in query set
class VisVisitParameterValues(models.Model):
vpvalue_id = models.IntegerField(primary_key=True)
vparameter = models.ForeignKey('VisVisitParameters', models.DO_NOTHING,related_name='values')
parameter_value = models.TextField(blank=True, null=True)
class VisVisits(models.Model):
visit_id = models.IntegerField(primary_key=True,auto_created=True)
app_local_id = models.IntegerField(blank=True, null=True)
visit_day = models.IntegerField(blank=True, null=True,db_column='visit_no')
class VisVisitData(models.Model):
vdata_id = models.IntegerField(primary_key=True,auto_created=True)
app_local_id = models.IntegerField(blank=True, null=True)
visit = models.ForeignKey('VisVisits', models.DO_NOTHING, blank=True, null=True, related_name='data')
vparameter = models.ForeignKey('VisVisitParameters', models.DO_NOTHING, blank=True, null=True,related_name='parameters')
vpvalue = models.ForeignKey('VisVisitParameterValues', models.DO_NOTHING, blank=True, null=True,related_name='parameters_values')