Как преобразовать необработанный sql в Django ORM?

Мне дали sql запрос и я должен преобразовать его в Django ORM и вывод должен быть таким же.

sql_query = "SELECT a.ID, a.post_title, a.post_name, a.post_date, d.meta_value, e.meta_value 
FROM wp_8_posts a, wp_8_term_relationships b, wp_8_term_relationships c, wp_8_postmeta d, wp_8_postmeta e 
WHERE 
a.post_type = :post_type AND 
a.post_status = 'publish' AND 
a.ID = b.object_id AND 
b.term_taxonomy_id = 1 AND 
a.ID = c.object_id AND 
c.term_taxonomy_id = :post_tag AND
a.ID = d.post_id AND 
d.meta_key = 'upurl' AND 
a.ID = e.post_id AND 
e.meta_key = 'target' 
ORDER BY a.post_date DESC;"

models.py

class Wp_8Post(models.Model):
    ID = models.IntegerField(primary_key=True,null=False,default=None)
    post_author = models.IntegerField(null=False,default=0)
    post_date = models.DateTimeField(null=False)
    post_title = models.TextField(null=False,default=None)
    post_status = models.CharField(max_length=20,null=False,default='publish')
    post_name = models.CharField(max_length=200,null=False,blank=True)
    post_modified = models.DateTimeField(null=False)
    guid = models.CharField(max_length=255,null=False,blank=True)
    post_type = models.CharField(max_length=20,null=False,default='post')
    
    class Meta:
        app_label = 'cms'
        db_table = 'wp_8_posts'

class Wp_8Postmeta(models.Model):
    meta_id = models.IntegerField(primary_key=True,null=False,default=None)
    post_id = models.ForeignKey(Wp_8Post,on_delete=models.CASCADE)
    meta_key = models.CharField(max_length=255,null=True,default=None)
    meta_value = models.TextField(null=True,default=None)

    class Meta:
        app_label = 'cms'
        db_table = 'wp_8_postmeta'

class Wp_8Termrelationships(models.Model):
    object_id = models.ForeignKey(Wp_8Post,on_delete=models.CASCADE)
    term_taxonomy_id = models.IntegerField()
    term_order = models.IntegerField(null=False,default=0)
    class Meta:
        app_label = 'cms'
        db_table = 'wp_8_term_relationships'

        UniqueConstraint(
            name = 'term_relationship',
            fields = ['object_id','term_taxonomy_id']
        )

Сначала я думал минимизировать sql запрос, используя INNER JOIN, поэтому я попробовал это, но я запутался, почему одна и та же таблица используется два раза как разные переменные.

SELECT a.ID, a.post_title, a.post_name, a.post_date from wp_8_posts a INNER JOIN wp_8_term_relationships b on a.ID = b.object_id INNER JOIN wp_8_postmeta c on c.post_id = a.ID
WHERE a.post_type = post_type AND 
a.post_status = 'publish' AND
b.term_taxonomy_id = 1

Я думал, что когда я преобразую это утверждение с помощью INNER JOIN, я смогу применить select_related. Но я не смог преобразовать его.

Пожалуйста, помогите мне понять использование множественной переменной в запросе и преобразовать это в ORM.

Вернуться на верх