gpt4 book ai didi

django - 通过计算多行的总和来验证 Django 模型数据

转载 作者:行者123 更新时间:2023-12-04 12:41:11 25 4
gpt4 key购买 nike

我有两个模型:

class User(models.Model):
name = models.CharField(max_length=32)


class Referral(models.Model):
referring_user = models.ForeignKey(User, related_name="referrals")
referred_user = models.ForeignKey(User, related_name="referrers")
percentage = models.PositiveIntegerField()

这个想法是每个用户都有 n推荐人,并且应该至少有一个。每个推荐人都有一个 percentage当添加到其他引用时,该值加起来应为 100%。

因此,用户“Alice”可能有推荐人“Bob”(50%)和“Cynthia”(50%),用户“Donald”可能有一个推荐人:“Erin”(100%)。

我遇到的问题是验证。有没有一种方法(最好是使用 admin.TabularInline 与 Django 管理员配合得很好)我可以验证拒绝保存 User如果 Refferrals != 100%的总和?

理想情况下,我希望这发生在表单/管理员级别,而不是通过覆盖 User.save() ,但此时我不知道从哪里开始。 Django 的大部分验证代码似乎是原子的,跨多行验证不是我以前在 Django 中做过的。

最佳答案

per the Django docs , clean()是为您的目的实现的官方功能。你可以想象一个看起来像这样的函数:

from django.core.exceptions import ValidationError

def clean(self):
total_percentage = 0
for referrer in self.referrers.all():
total_percentage += referrer.percentage
if total_percentage !== 100:
raise ValidationError("Referrer percentage does not equal 100")

关于django - 通过计算多行的总和来验证 Django 模型数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23021540/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com