Django - Объединение двух таблиц без внешнего ключа

У меня есть две таблицы и я хочу объединить их... но я не могу сделать это без rawQueryset и raw SQL.

Как я могу соединить две модели без внешнего ключа? Колонки для JOIN не уникальны, поэтому они не могут быть PK и Foreign Key.

Я хочу получить SQL LIKE THIS

'SELECT * FROM genome AS A JOIN metadata AS B ON A.query_id = B.sample_id',

и это модели, которые я использовал.


class Genome(models.Model):
    query_id = models.CharField(max_length=100) 
    ref_id = models.CharField(max_length=30)
    matching_hashes = models.CharField(max_length=30)


class Metadata(models.Model):
    project_id = models.CharField(max_length=50) # Metagenome의 query id와 JOIN함
    sample_id = models.CharField(max_length=50)

Вы можете попробовать следующее:

Сначала постройте SQL-запрос желаемым образом

sql_query = "SELECT * FROM genome AS A JOIN metadata AS B ON A.query_id = B.sample_id"

Пользователь задает SQL-запрос в соединении с БД django следующим образом:

from django.db import connection

def my_custom_sql(self):
    cursor = connection.cursor()    
    cursor.execute(sql_query)
    row = cursor.fetchall()
    return row

Или вы можете попробовать выполнить raw() следующим образом

Genome.objects.raw(sql_query) # in some cases it may not work

Вы можете попробовать следующее:

sample_ids = Metadata.objects.all().values_list('sample_id', flat=True)
Genome.objects.filter(query_id__in=sample_ids)
Вернуться на верх