Как преобразовать необработанный 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.