【发布时间】:2021-07-24 01:48:37
【问题描述】:
我有两个模型。 DepartmentGoal 带有字段“scores”,Task 也带有字段“scores”和外文部门目标。
我想要的是;如果我将分数分配给 DepartmentGoal,则分配给 Task 的分数应该从 DepartmentGoal 的分数中减去,这意味着 Task 分数的任意数量实例加起来应该等于 DepartmentGoal 单个实例的分数。
我只需要一个关于如何实现它的线索。
这是模型
class DepartmentGoal(models.Model):
name = models.TextField(max_length=150, null=True)
score = models.IntegerField(null=True, blank=True)
created_at = models.DateTimeField(auto_now_add=True, null=True)
updated_at = models.DateTimeField(auto_now=True, null=True)
def __str__(self):
return self.name
class Task(models.Model):
name = models.CharField(max_length=300, null=True)
departmentgoal = models.ForeignKey(DepartmentGoal, on_delete=models.CASCADE, related_name='departgoal', null=True, blank=True)
score = models.IntegerField(null=True, blank=True)
created_at = models.DateTimeField(auto_now_add=True, null=True)
updated_at = models.DateTimeField(auto_now=True, null=True)
def __str__(self):
return self.name
表格在这里
class DepartmentGoalForm(ModelForm):
class Meta:
model = DepartmentGoal
fields = (
('name'),
('score'),
)
class TaskForm(ModelForm):
class Meta:
model = Task
fields = [
'departmentgoal',
'name',
'score',
]
这是我的实现
class Task(models.Model):
name = models.CharField(max_length=300, null=True)
departmentgoal = models.ForeignKey(DepartmentGoal, on_delete=models.CASCADE, related_name='departgoal', null=True, blank=True)
score = models.IntegerField(null=True, blank=True)
created_at = models.DateTimeField(auto_now_add=True, null=True)
updated_at = models.DateTimeField(auto_now=True, null=True)
def save(self, *args, **kwargs):
goal = DepartmentGoal.objects.get(id=self.departmentgoal.id)
goal.scores -= self.scores
goal.save()
super(Task, self).save(*args, **kwargs)
我现在的问题是,如果部门目标分数用尽,即变为 0,用户仍然可以向任务添加新的任务分数,这会将部门目标分数的值更新为负分数。这是我要防止的行为。如果部门目标分数的值达到零,用户应该无法添加更多的任务和任务分数
【问题讨论】:
-
那么如果会有多个Task实例...那么您打算从哪个Task中减去分数...??
-
如果我理解正确,您希望
DepartmentGoal的score是一个计算字段,它是关联的score(s) 的总和Task(s) ? -
@Scratch'N'purr。是的。
-
@Pratab 一个任务分数的多个实例应该总结为一个部门目标。如果设定了目标,例如建造房子,我为实现这一目标设定了 10 分。子目标也称为任务,例如绘制建筑计划 = 5。建造房子 = 3。将设置屋顶房子 = 2。这些得分将加起来达到目标的分数,即 10。这是我在过去 3 天不安分的夜晚一直在努力实现的目标。 ??????
-
我希望能够使用表格设置目标分数和任务分数。
标签: django foreign-keys task django-model-field