2017-12-07 8 views
0
に参加

クロス表左私は、次のモデルが、DjangoのORM

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に別のテーブルに参加:

SELECT TRADE_NOTIFICATIONS左からTRADE_DETAILS.TRADE_NAMEはTRADE_NOTIFICATIONS.CREATED_TIMESTAMP = TRADE_DETAILS.CREATED_TIMESTAMP ON TRADE_DETAILS

をJOIN

これを行うにはDjangoのようなやり方がありますか?つまり、ちょうどrawと一緒に行くべきですか 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()に変更します。これは、データベースからの読み取りのみを行い、リバースエンジニアリングして非管理モデルとして使用する場合に特に便利です。

関連する問題