Предположим, у вас есть эти модели в приложении django под названием horaire
:
class A(models.Model):
city = models.CharField(max_length=200, null=True, blank=True)
postcode = models.CharField(max_length=200, null=True, blank=True)
state = models.CharField(max_length=200, null=True, blank=True)
class B(models.Model):
jurs_id = models.ForeignKey(A, related_name="ab", on_delete=models.DO_NOTHING)
rate_authority = models.CharField(max_length=200, null=True)
rate = models.CharField(max_length=200, null=True)
rate_descr = models.CharField(max_length=200, null=True)
В оболочке вашего django вы можете сделать:
$> from horaire.models import B
$> items = B.objects.values(
'jurs_id__city',
'jurs_id__state',
'jurs_id__postcode',
'rate_authority',
'rate',
'rate_descr'
).order_by('jurs_id__state')
$> print(items.query)
SELECT
"horaire_a"."city",
"horaire_a"."state",
"horaire_a"."postcode",
"horaire_b"."rate_authority",
"horaire_b"."rate",
"horaire_b"."rate_descr"
FROM "horaire_b"
INNER JOIN "horaire_a" ON ("horaire_b"."jurs_id_id" = "horaire_a"."id")
ORDER BY "horaire_a"."state" ASC
ИЛИ вы можете сделать:
$> from horaire.models import A
$> items = A.objects.values(
'city',
'postcode',
'state',
'ab__rate_authority',
'ab__rate',
'ab__rate_descr'
).order_by('state')
$> print(items.query)
SELECT
"horaire_a"."city",
"horaire_a"."postcode",
"horaire_a"."state",
"horaire_b"."rate_authority",
"horaire_b"."rate",
"horaire_b"."rate_descr"
FROM "horaire_a"
LEFT OUTER JOIN "horaire_b" ON ("horaire_a"."id" = "horaire_b"."jurs_id_id")
ORDER BY "horaire_a"."state" ASC
Однако, как вы можете видеть, в окончательных SQL-запросах нет ALIAS
, и я не нашел относительного способа сделать это, используя DJANGO ORM
(см. Этот ответдля более подробной информации ).Кроме того, вы всегда можете передать Raw SQL
и, конечно, вы можете написать свой собственный запрос SQL, а затем использовать данные в своих приложениях.Для получения дополнительной информации о Raw SQL in Django
посетите эту документацию по ссылке