[英]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.