gpt4 book ai didi

python - Django,在通过模型验证器自定义函数进行验证时传递整个对象实例

转载 作者:行者123 更新时间:2023-12-04 04:10:39 24 4
gpt4 key购买 nike

我在 Django 中为我的模型创建了一个自定义验证函数,如下所示:

class Profile(models.Model):
user = models.OneToOneField(
User,
on_delete=models.CASCADE,
primary_key=True,
default=None
)
company_name = models.CharField(validators=[validate_url],max_length=50, null=False, blank=False)
...

我的 validate_url 函数将 company_name 转换为 url 并检查生成的相同 url 是否已存在于任何配置文件中。

def validate_url(value):
url = value.replace(' ', '-')
url = url.lower()
try:
u = Profile.objects.get(url=url)
raise ValidationError(
'The company name already exist'
)
except Profile.DoesNotExist:
pass

当创建新配置文件并将其保存到数据库时,这似乎工作正常。但是,当我只是编辑现有配置文件的其他字段(通过管理员)时,它会引发 validate_url 的验证错误,因为它认为自己已经存在值。我想传递该实例的用户并检查该用户是否等于来自 u = Profile.objects.get(url=url) 的 u.user,如果它们相等,则不应引发错误。

问题是我不能简单地这样做:

validators=[validate_url(self.user)]

因为它给了我未定义 self 的错误。在保存配置文件之前验证时如何传递用户对象实例?

最佳答案

您确定这是验证器的正确用法吗?它应该只检查条件是否匹配。我认为你应该覆盖保存方法

def save(self, *args, **kwargs):
#Check here company name, modify ...
super().save(*args, **kwargs)

关于python - Django,在通过模型验证器自定义函数进行验证时传递整个对象实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61794712/

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