python - 使用 python 获取 django 模型中字段的 "unique item"

标签 python django r unique

我现在正在学习使用 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/

相关文章:

python - 计算 pandas 中每组的数值差异

django - 如何让用户在Django中的同一列输入多语言文本数据?

r - 在R中覆盖没有轴标题的图(没有ggplot2)

python - 使用 python 进行 Kerberos 身份验证

android - Foursquare用户 checkin V2

Django 为不在 INSTALLED_APPS 中的应用程序执行测试

Django 强制 makemigrations 使用制表符而不是空格

r - 支持向量机预测错误

r - 带有两个数据框的ggplot条形图

python - 意外错误 : WHERE parameter "undefined" has invalid "undefined" value