I am trying to figure out how to recreate the following SQL join in Django:
SELECT taxonomy_request_id, proposed_taxonomy, data_source_field_name, data_source_table_name, data_source_database_name, data_source_server_name
FROM taxonomy_process_field
JOIN data_source_field dsf on dsf.id = taxonomy_process_field.data_source_field_id
JOIN data_source_table dst on dst.id = dsf.data_source_table_id
JOIN data_source_database dsd on dst.data_source_database_id = dsd.id
JOIN data_source_server dss on dss.id = dsd.data_source_server_id
WHERE taxonomy_request_id = 1
My models are:
class DataSourceServer(models.Model):
system = models.ForeignKey('System', models.DO_NOTHING, blank=True, null=True)
data_source_server_name = models.TextField(blank=True, null=True)
data_source_server_description = models.TextField(blank=True, null=True)
server_location = models.ForeignKey('ServerLocation', models.DO_NOTHING, blank=True, null=True)
data_source_server_owner_id = models.ForeignKey(Person, models.DO_NOTHING, blank=True, null=True)
record_last_updated = models.TextField(blank=True, null=True)
class Meta:
managed = False
db_table = 'data_source_server'
class DataSourceDatabase(models.Model):
data_source_server = models.ForeignKey('DataSourceServer', models.DO_NOTHING, blank=True, null=True)
data_source_database_name = models.TextField(blank=True, null=True)
data_source_database_description = models.TextField(blank=True, null=True)
data_source_database_owner_id = models.ForeignKey(Person, models.DO_NOTHING, blank=True, null=True)
record_last_updated = models.TextField(blank=True, null=True)
class Meta:
managed = False
db_table = 'data_source_database'
class DataSourceTable(models.Model):
data_source_database = models.ForeignKey(DataSourceDatabase, models.DO_NOTHING, blank=True, null=True)
data_source_table_name = models.TextField(blank=True, null=True)
data_source_table_description = models.TextField(blank=True, null=True)
data_source_table_owner_id = models.ForeignKey(Person, models.DO_NOTHING, blank=True, null=True)
record_last_updated = models.TextField(blank=True, null=True)
class Meta:
managed = False
db_table = 'data_source_table'
class DataSourceField(models.Model):
data_source_table = models.ForeignKey('DataSourceTable', models.DO_NOTHING, blank=True, null=True)
data_source_field_name = models.TextField(blank=True, null=True)
data_source_field_data_type = models.TextField(blank=True, null=True)
data_source_field_data_len = models.TextField(blank=True, null=True)
record_last_updated = models.TextField(blank=True, null=True)
class Meta:
managed = False
db_table = 'data_source_field'
class TaxonomyProcessField(models.Model):
taxonomy_request = models.ForeignKey('TaxonomyRequest', models.DO_NOTHING, blank=True, null=True)
data_source_field = models.ForeignKey(DataSourceField, models.DO_NOTHING, blank=True, null=True)
proposed_taxonomy = models.TextField(blank=True, null=True)
recommended_taxonomy = models.TextField(blank=True, null=True)
field_description = models.TextField(blank=True, null=True)
record_updated_by = models.TextField(blank=True, null=True)
record_added = models.TextField(blank=True, null=True)
record_last_updated = models.TextField(blank=True, null=True)
class Meta:
managed = False
db_table = 'taxonomy_process_field'
I have tried using the following code to get the results:
TaxonomyProcessField.objects.filter(taxonomy_request_id=1).select_related().values()
But all I get back is a dict of values without the foreign key values showing what DataSource it belongs to for field, table, database and server.
Maybe I am not understand how selected_related
works?