Skip to main content
 首页 » 编程设计

python之在 Django ORM 中的 3 个表上选择相关

2024年08月15日37落叶无声

我需要一些帮助来在 Django 框架中执行 select_related。 我的模型是:

models.py 
 
class Richiesta(models.Model): 
    # TIPOLOGIE_DISPOSITIVO can be = BK or SC 
    codice = models.CharField(max_length=20, null=True, blank=True, unique=True) 
    ufficio_registrazione = models.ForeignKey(UfficioRegistrazione, null=True, blank=False) 
    tipologia = models.CharField(max_length=50, null=False, blank=False, choices=TIPOLOGIE_DISPOSITIVO, default=TIPOLOGIE_DISPOSITIVO[0][0]) 
    tipo = models.IntegerField(null=False, blank=False, choices=TIPO_CHOICES, default=TIPO_PRIMO_RILASCIO) 
    data_produzione = models.DateTimeField(null=True, blank=True) 
 
class UfficioRegistrazione(models.Model): 
    cliente = models.ForeignKey(Cliente, null=False, blank=False) 
 
class Cliente(models.Model): 
    # provider can be = 1 or 2 
    denominazione = models.CharField(max_length=100, null=False, blank=False) 
    codice_cliente = models.PositiveIntegerField(null=False, blank=False, db_index=True) 
    provider = models.IntegerField(null=False, blank=False, choices=PROVIDER_CHOICES) 

还有我需要使用 Django ORM 执行的原始 sql 查询:

select cms_richiesta.id, cms_richiesta.tipologia, cms_richiesta.data_produzione,  
cms_richiesta.ufficio_registrazione_id, cms_ufficioregistrazione.id,  
cms_ufficioregistrazione.cliente_id, cms_cliente.id, cms_cliente.provider,  
cms_cliente.denominazione, cms_cliente.codice_cliente 
from cms_richiesta INNER JOIN cms_ufficioregistrazione on  
cms_richiesta.ufficio_registrazione_id=cms_ufficioregistrazione.id 
INNER JOIN cms_cliente on cms_ufficioregistrazione.cliente_id =  
cms_cliente.id where data_produzione>'2011-01-01' and data_produzione<'2017-  
12-31' and cms_cliente.provider = 2 and cms_richiesta.tipologia='BK' 

谁能帮帮我?

请您参考如下方法:

Richiesta.objects.filter(ufficio_registrazione__cliente__provider=2,tipologia='BK') 

其余过滤器可以这样添加