我的问题基本上就是这个。我有一个类(让我们说跑步者)和一个子类(比如说有跳跃或什么的,用于不同的跳跃)。现在我想要一个类中的变量,它是跳跃的总和。基本上是:
internal static bool IsSimpleType(Type type)
{
return type.IsPrimitive ||
type.Equals(typeof(string)) ||
type.Equals(typeof(DateTime)) ||
type.Equals(typeof(Decimal)) ||
type.Equals(typeof(Guid)) ||
type.Equals(typeof(DateTimeOffset)) ||
type.Equals(typeof(TimeSpan));
}
internal static bool IsSimpleUnderlyingType(Type type)
{
Type underlyingType = Nullable.GetUnderlyingType(type);
if (underlyingType != null)
{
type = underlyingType;
}
return TypeHelper.IsSimpleType(type);
}
internal static bool HasStringConverter(Type type)
{
return TypeDescriptor.GetConverter(type).CanConvertFrom(typeof(string));
}
???是否有证明这是我想要的东西。是否有可能沿着这些方式实现这一点,然后可以在Runner类中定义一个使用total_time的新函数吗?
答案 0 :(得分:0)
在这种情况下,您通常不会注释,而是聚合。您可以在Sum
上使用Leap
来获取特定参赛者的class Runner(model.Model):
# ...
def total_time(self):
return self.leap_set.aggregate(total=Sum('time'))['total_time'] or 0
,例如:
or 0
如果Leap
的集合为空,则使用None
。在这种情况下,汇总将是or 0
。通过使用leap_set
,我们将其替换为零。
没有Leap
(作为相关名称)的替代方法是过滤class Runner(model.Model):
# ...
def total_time(self):
return (Leap.objects.filter(runner=self)
.aggregate(total=Sum('time'))['total_time'] or 0)
个对象:
Runner
如果您想使用total_time
注释.annotate
的整个查询集,可以使用from django.db.models.functions import Coalesce
Runner.objects.annotate(total_time=Coalesce(Sum('leap__time'), 0))
:
Coalesce
我们这里使用0
函数来使用None
代替Leap
,以防measureView(event: Object) {
console.log(`*** event: ${JSON.stringify(event.nativeEvent)}`);
// you'll get something like this here:
// {"target":1105,"layout":{"y":0,"width":256,"x":32,"height":54.5}}
}
render() {
return (
<View onLayout={(event) => {this.measureView(event)}} />
);
}
s的集合为空。