我现在正在学习使用 django 和 python,我有一个小任务如下:
我定期记录我每月的投资数据,并创建一个 django 模型如下:
class money_tx(models.Model):
tx_date = models.DateField()
investment_plan = models.ForeignKey(investment_plan)
tx_type_choice = (
("deposit","deposit"),
("withdrawal","withdrawal"),
)
tx_type = models.CharField(max_length=20, choices=tx_type_choice)
tx_amt = models.DecimalField(max_digits=16,decimal_places=6)
class Meta:
ordering = ["-tx_date"]
我正在尝试在 django 中创建一个 View ,它会告诉我尚未输入特定月份的哪些基金购买信息,输出应如下所示:
DATE PLAN_A PLAN_B PLAN_C
2010-01 PRESENT MISSING PRESENT
2010-02 PRESENT MISSING PRESENT
2010-03 PRESENT MISSING MISSING
作为 R 的常规用户,我将上述输出视为数据帧
,因此我需要创建一个类似于下面的数据集,然后才能获得输出:
INV_PLAN DATE STATUS
PLAN_A 2010-01 PRESENT
PLAN_A 2010-02 PRESENT
PLAN_A 2010-03 PRESENT
PLAN_B 2010-01 MISSING
PLAN_B 2010-02 MISSING
PLAN_B 2010-03 MISSING
PLAN_C 2010-01 PRESENT
PLAN_C 2010-02 PRESENT
PLAN_C 2010-03 MISSING
我计划创建一个字典对象(类似于 temp = {'test':[1,2,3],'temp':['a','b','c']}
),并使用for循环
生成状态。
我在字典对象中创建 date
字段没有问题,但如何从我的模型中提取唯一的 PLAN_NAME
?
当我尝试编写Python脚本时,我不知道我的“从R角度思考”的方式是否合适。请评论,或者我应该使用 MySQL 的方式来做?对于我的对象的反Python命名感到抱歉。谢谢。
更新01
感谢 DrTyrsa 的回答,差不多就可以了,这里有一条额外的信息:
class investment_organization(models.Model):
organization_abbre = models.CharField(max_length=20)
organization_name = models.CharField(max_length=200)
def __unicode__(self):
return self.organization_abbre
class investment_plan(models.Model):
organization = models.ForeignKey(investment_organization)
plan_code = models.CharField(max_length=20)
class Meta:
ordering = ["organization", "plan_code"]
def __unicode__(self):
return u'%s - %s' % (self.organization, self.plan_code)
我的投资计划由两条信息组成,其中之一是公司名称,它存储在另一个模型中,我如何将其包含在我的最终输出中,如下所示:
ORG INV_PLAN DATE STATUS
ORG_A PLAN_A 2010-01 PRESENT
ORG_A PLAN_A 2010-02 PRESENT
ORG_A PLAN_A 2010-03 PRESENT
ORG_A PLAN_B 2010-01 MISSING
ORG_A PLAN_B 2010-02 MISSING
ORG_A PLAN_B 2010-03 MISSING
ORG_B PLAN_C 2010-01 PRESENT
ORG_B PLAN_C 2010-02 PRESENT
ORG_B PLAN_C 2010-03 MISSING
再次感谢。
最佳答案
这是您的数据集:
from itertools import groupby
money = money_tx.objects.order_by('-tx_date')
plans = investment_plan.objects.select_related()
result = []
for date, group in groupby(money, lambda x: x.tx_date):
plans_for_date = set(x.investment_plan_id for x in group)
for plan in plans:
data = {'ORG': plan.organization.organization_name,
'INV_PLAN': plan.plan_code,
'DATE': date,
'PRESENT': (plan.id in plans_for_date)}
result.append(data)
print result
关于python - 使用 python 获取 django 模型中字段的 "unique item",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8585848/