繁体   English   中英

我可以使用 annotate 在 django 中创建 Charfield 吗?

[英]Can I use annotate to create a Charfield in django?

我正在使用一个名为 Account 的对象数据集,该数据集需要 go 通过注释来进行一些计算。 我有一个范围列表 [[0, 1], [2, 4], [5, 49], [50, 99]] 代表不同范围的员工。 我想做一个注释来分析 object 帐户是否属于某个范围,如果是,则创建一个名为“range_name”的动态字段并将范围存储为字符串。 出于某种原因,当我想这样做时,我得到了这个:

django.core.exceptions.FieldError: Cannot resolve keyword '[0, 1]' into field. Choices are: annual_revenue, avg_deal_size, cltv, employees, velocity

这是我的models.py:

class Account(models.Model):
    name = models.CharField(max_length=200, null=True, blank=True)
    employees = models.PositiveIntegerField(
        db_index=True,
        blank=True,
        null=True,
    )
    annual_revenue = models.BigIntegerField(
        db_index=True,
        null=True,
        blank=True
    )
    avg_deal_size = models.PositiveIntegerField(
        db_index=True,
        null=True,
        blank=True
    )
    cltv = models.BigIntegerField(db_index=True, null=True, blank=True)
    velocity = models.PositiveIntegerField(
        db_index=True,
        null=True,
        blank=True
    )

这是我尝试 annotate() 的 views.py 中的代码:

accounts = Account.objects.all()
employees_ranges = [[0, 1], [2, 4], [5, 49], [50, 99]]

for employee_range in employees_ranges:
    #here i turn the range into a string
    ranges_as_string = ', '.join([str(number) for number in employee_range])
    ranges_as_string = '['+ranges_as_string+']'

    accounts_with_range_field = accounts.filter(employees__range=var).annotate(
        range_name=Case(
            When(
                Q(employees__gt=var[0]) &
                Q(employees_lt=var[1]),
                then=ranges_as_string
           ), output_field=Charfield()

# once the dynamic field is created, I want to use it to make some calculations like this:

avgds_list = accounts_with_range_field.values('range_name').annotate(
    avg_deal_size=Avg(
        'avg_deal_size', output_field=PositiveIntegerField()
    ),
    cltv=Avg('cltv', output_field=PositiveIntegerField()),
    velocity=Avg('velocity', output_field=IntegerField())
)

希望解释足够清楚,感谢您花时间阅读!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM