Python 如何将下面的SQL状态转换为Django ORM

Python 如何将下面的SQL状态转换为Django ORM,python,sql,django,django-orm,Python,Sql,Django,Django Orm,很难将下面的SQL语句转换为Django ORM。非常感谢您的帮助 SELECT a.state, a.city, a.postcode, b.rate_authority, b.rate, b.rate_descr FROM fileload_taxratemodel AS a INNER JOIN fileload_taxrateresponsemodel AS b

很难将下面的SQL语句转换为Django ORM。非常感谢您的帮助

SELECT a.state, 
       a.city, 
       a.postcode, 
       b.rate_authority, 
       b.rate, 
       b.rate_descr 
FROM   fileload_taxratemodel AS a 
       INNER JOIN fileload_taxrateresponsemodel AS b 
               ON b.jurs_id_id = a.id 
ORDER  BY state ASC 
Django车型:

尝试根据外键从两个模型中提取字段

class TaxRateModel(models.Model):

company_code = models.CharField(max_length = 10)
document_date = models.DateTimeField()
country = models.CharField(max_length = 30, default = "US")
province = models.CharField(max_length = 100, null= True,blank= True)
state = models.CharField(max_length = 100)
county = models.CharField(max_length = 100,blank=True, null=True)
city = models.CharField(max_length = 100,blank=True, null=True)
district = models.CharField(max_length = 100, blank=True, null=True)
postcode = models.CharField(max_length = 5, blank=True, null=True)
rate_code = models.CharField(max_length = 30,default = "ST")
Django第2款:

class TaxRateResponseModel(models.Model):
jurs_id = models.ForeignKey(TaxRateModel,on_delete=models.CASCADE,related_name='rates')
rate_authority = models.CharField(max_length = 100, blank=True, null=True, default='')
rate_descr = models.CharField(max_length = 100, blank=True, null=True, default ='')
rate = models.DecimalField(max_digits= 10, decimal_places=5)

假设您在一个名为
horaire
的django应用程序中拥有这些模型:

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的shell中,您可以执行以下操作:

$> 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
或者,您可以执行以下操作:

$> 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查询中没有任何
别名
,我也没有找到使用
DJANGO ORM
实现它的相对方法(请参见此)。 除此之外,您还可以传递
原始SQL
,当然,您可以编写自定义SQL查询,然后使用应用程序下的数据。
有关Django中原始SQL的更多信息,请访问此

你能添加你的Django模型吗?真棒@chiheb,这正是我想要的-非常感谢!!