2017-12-07 3 views
0

나는 다음과 같은 모델이 있습니다크로스 테이블 왼쪽, 장고 ORM

SELECT :

나는 왼쪽을 수행 할
class TradeDetails(models.Model): 
    created_timestamp = models.DateTimeField(db_column='CREATED_TIMESTAMP', primary_key=True) 
    trade_name = models.CharField(db_column='TRADE_NAME', max_length=45) 
    trade_image = models.CharField(db_column='TRADE_IMAGE', max_length=500, blank=True, null=True) 

    class Meta: 
     managed = False 
     db_table = 'TRADE_DETAILS' 


class TradeNotifications(models.Model): 
    client_id = models.CharField(db_column='CLIENT_ID', primary_key=True, max_length=15) 
    created_timestamp = models.DateTimeField(db_column='CREATED_TIMESTAMP') 
    updated_timestamp = models.DateTimeField(db_column='UPDATED_TIMESTAMP', blank=True, null=True) 
    platform_notification = models.IntegerField(db_column='PLATFORM_NOTIFICATION', blank=True, null=True) 
    sms_notification = models.IntegerField(db_column='SMS_NOTIFICATION', blank=True, null=True) 
    email_notification = models.IntegerField(db_column='EMAIL_NOTIFICATION', blank=True, null=True) 
    caller_notification = models.IntegerField(db_column='CALLER_NOTIFICATION', blank=True, null=True) 
    caller_id = models.IntegerField(db_column='CALLER_ID', blank=True, null=True) 
    client_confirmation = models.IntegerField(db_column='CLIENT_CONFIRMATION', blank=True, null=True) 
    device_id = models.CharField(db_column='DEVICE_ID', max_length=256, blank=True, null=True) 
    platform = models.CharField(db_column='PLATFORM', max_length=15, blank=True, null=True) 
    ip_address = models.CharField(db_column='IP_ADDRESS', max_length=50, blank=True, null=True) 
    expired = models.IntegerField(db_column='EXPIRED', blank=True, null=True) 
    trade_sent = models.IntegerField(db_column='TRADE_SENT', blank=True, null=True) 

    class Meta: 
     managed = False 
     db_table = 'TRADE_NOTIFICATIONS' 
     unique_together = (('client_id', 'created_timestamp'),) 

는 다음과 같은 SQL 쿼리를 사용하여 동일한 DB에 다른 테이블에 조인 TRADE_NOTIFICATIONS LEFT FROM TRADE_DETAILS.TRADE_NAME는 TRADE_NOTIFICATIONS.CREATED_TIMESTAMP = TRADE_DETAILS.CREATED_TIMESTAMP ON TRADE_DETAILS 가입

,174,

Django와 같은 방식으로 더 많은 방법이 있습니까? 아니면 그냥 원시로 처리해야합니까? sql? 몇 가지 답변을 읽고시

나는이하려고 노력 :

TradeNotifications.objects.using('tradenotifications').all().values_list('trade_name', 'trade_details_created_timestamp') 

을하지만, 오류 발생 : 같은 장고와 외래 키로 이 django.core.exceptions.FieldError: Cannot resolve keyword 'trade_name' into field. Choices are: caller_id, caller_notification,

답변

0

당신은 모델 사이에 어떤 관계없이 테이블에 가입 할 수 있습니다 ORM. 모델 사이에 관계가 있어야합니다.

이 관계는 데이터베이스에있을 필요는 없지만 모델에 정의되어 있다면 충분하지만 TradeDetails 및 TradeNotifications 모델에서는 이것이 가능하지 않다고 생각합니다. client_id 필드에서 가능할 수 있습니다. CharField()에서 ForeignKey()으로 변경하십시오. 이는 데이터베이스에서 읽기만하고 리버스 엔지니어링하여 비 관리 모델로 사용할 때 특히 유용합니다.