Джанго Удлинительная модель - PullRequest
0 голосов
/ 15 мая 2018

Я просто хочу узнать, как расширить модель в Django без необходимости создавать новые таблицы или строки базы данных.

У меня есть две модели.SSALi с уникальным тикером и датой, а NELi с тикером и датой, которые вместе уникальны.Мне нужна модель или функция с именем NN_feed, которая имеет все атрибуты обеих моделей, настроения EG и прогноза.

Ниже работает, но он создал новую таблицу, к которой мне нужно присоединиться для каждой строки и даты.

Есть ли способ сделать это без дополнительных таблиц базы данных и просто извлечь из существующих данных?

Для ясности, базы данных SSALiReport и NELiReport должны оставаться неизменными.Я просто хочу перенести данные в третью модель и просто просмотреть все данные в одном месте.

from django.contrib.postgres.fields import JSONField
from django.db import models
import datetime

# Create your models here.

class SSALiReport(models.Model):

    date = models.DateField()
    ticker = models.CharField(max_length=10,default='NA')
    market = models.CharField(max_length=250,default='NA')

    price = models.FloatField()
    prediction = models.FloatField()


    def __str__(self):
        return str(self.date) + " - " + str(self.ticker)


class NELiReport(models.Model):

    date = models.DateField()
    ticker = models.CharField(max_length=10,default='NA')
    sentiment = models.FloatField(default='0.0')
    clout = models.FloatField(default='0.0')
    top_news = JSONField(default='{}')


    def __str__(self):
        return str(self.date) + " - " + str(self.ticker)

class TopStock(models.Model):

    ticker = models.CharField(max_length=10,default='NA')
    name = models.CharField(max_length=200,default='NA')
    current_price = models.FloatField(default='0.0')
    date = models.DateField(default=datetime.date.today)

    # need to add company name

    def __str__(self):
        return str(self.date) + " - " + str(self.ticker)


class NNFeed(models.Model):

    NELi = models.OneToOneField(NELi_Report, on_delete=models.CASCADE)
    SSALi = models.OneToOneField(SSALi_Report, on_delete=models.CASCADE)

этот скрипт SQL работает

SELECT *
FROM api_neli_report, api_ssali_report
WHERE api_neli_report.ticker = api_ssali_report.ticker
AND api_neli_report.date =  api_ssali_report.date

что такое эквивалент django?

1 Ответ

0 голосов
/ 16 мая 2018

Для тех, у кого есть такая же проблема, см. Ниже, как я решил ее.

Только что сделал это через представление, используя raw sql

qs = SSALi_Report.objects.raw("SELECT * FROM api_neli_report, api_ssali_report 
                               WHERE api_neli_report.ticker = api_ssali_report.ticker 
                               AND api_neli_report.date =  api_ssali_report.date")

for row in qs:
   output = {
      "date": row.date,
      "market": row.market,
      "prediction": row.prediction,
      "price": row.price,
      "ticker": row.ticker,
      "clout": row.clout,
      "sentiment": row.sentiment

    }

 return output
...