python - Django 扩展模型
问题描述
我只是想知道如何在 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 等价物?
解决方案
对于遇到相同问题的任何人,请参阅下文了解我是如何解决的。
只是通过使用原始 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
推荐阅读
- java - 如何知道一行Jtable是否可编辑?
- r - 在单个图上绘制许多分类变量
- javascript - 为什么我在路上时没有得到数据?
- mysql - 将 .mdf 文件转换为 .sql 脚本 (mac)
- c# - TraceWriter 日志未进入分析
- php - 如何将 meta_data 添加到 WooCommerce 客户
- python-3.x - 在 Windows 10 上的 Jupyter (Pyhtong3) 中创建新笔记本的权限被拒绝
- mongodb - Mongodump 管道进入 docker swarm
- php - 分离 REST 服务的动态和静态部分
- json - jasper map crosstab crosstabHeaderCell 来自与 crosstabdataset 不同的子数据集