python - 如何根据特定模型字段创建模型属性?
问题描述
假设我有以下模型:
class DriverReview(models.Model):
driver = models.ForeignKey(Driver, on_delete=models.CASCADE,)
driving_score = models.PositiveIntegerField(default=1, validators=[MinValueValidator(1), MaxValueValidator(5)])
communication_score = models.PositiveIntegerField(default=1, validators=[MinValueValidator(1), MaxValueValidator(5)])
professionalism_score = models.PositiveIntegerField(default=1, validators=[MinValueValidator(1), MaxValueValidator(5)])
review_text = models.TextField()
created = models.DateTimeField(auto_now_add=True)
created_by = models.ForeignKey(User, related_name="driver_review_created_by", on_delete=models.CASCADE, null=True, blank=True)
last_updated = models.DateTimeField(auto_now=True)
last_updated_by = models.ForeignKey(User, related_name="driver_review_last_updated_by", on_delete=models.CASCADE, null=True, blank=True)
is_deleted = models.BooleanField(default=False)
deleted = models.DateTimeField(null=True, blank=True)
deleted_by = models.ForeignKey(User, related_name="driver_review_deleted_by", on_delete=models.CASCADE, null=True, blank=True)
@property
def review_average_score(self):
review_average_score = round(np.mean([self.driving_score, self.communication_score, self.professionalism_score]), 2)
return review_average_score
我创建了一个属性来获取评论平均分。问题是我不想对 _score
字段进行硬编码。有没有办法过滤包含_score
并平均使用它们的字段?
解决方案
是的,您可以通过 来检查字段_meta
,因此:
@property
def review_average_score(self):
data = [
getattr(self, f.attname)
for f in self._meta.get_fields()
if '_score' in f.name
]
review_average_score = np.mean(data), 2)
return review_average_score
推荐阅读
- javascript - 在 JSON 树结构中搜索保留结构
- python-3.x - Pywinauto - 如何等待 TreeView 直到它可见
- javascript - 是否可以将多个文件压缩成单个 zip 并从 Angular 5+ 上传
- django - 如何根据相同模型的另一个字段更新模型字段
- c# - 如何在我选择的游戏对象下获取游戏对象的脚本?(Unity2D) (C#)
- javascript - 在 React Freezes Browser 中删除和添加数组中的元素
- javascript - 如何在 json_encode 输出后执行其余的 php 脚本?
- javascript - 我可以使用 Json.NET 将对象序列化为 JavaScript 构造函数调用吗?
- swift4 - 功能 nextTapped 不会移动到下一个 pdf 页面
- wordpress - 如何将短链接网址重定向到特定页面?