小编Dan*_*ong的帖子

Pydantic V2 - @field_validator `values` 参数等效

我正在从 Pydantic v1 迁移到 v2,并尝试用 @field_validator 替换已弃用的 @validator 的所有使用。

以前,我使用values验证器函数的参数来引用其他先前验证的字段的值。正如v1 文档所说

您还可以将以下参数的任意子集添加到签名中(名称必须匹配):

  • 值:包含任何先前验证的字段的名称到值映射的字典

由于签名已更改,此参数似乎values不再被传递。但是,迁移文档没有提及v2 中的等效项,并且 v2 验证器文档页面尚未针对 v2.0 进行更新。@field_validatorvalues

有谁知道 v2 的首选方法?

V1验证器:

@validator('password2')
def passwords_match(cls, v, values, **kwargs):
    if 'password1' in values and v != values['password1']:
        raise ValueError('passwords do not match')
    return v
Run Code Online (Sandbox Code Playgroud)

python pydantic

9
推荐指数
1
解决办法
1万
查看次数

Django 测试:User.authenticate 失败

我已经被这个问题困扰了几个小时。我是 django 和自动化测试的新手,我一直在使用 Selenium 和 django 的 StaticLiveServerTestCase。我一直在尝试测试我的登录表单(顺便说一句,当我使用 runserver 并自己测试它时,它工作得很好。)

一切工作都很好,除了我似乎无法成功登录我的测试用户。我已将断点范围缩小到 django 的 User.authenticate 方法。

User 对象在我的设置中已成功创建,我可以通过在测试方法中访问它的属性来确认这一点。但是,身份验证失败。

我查看了以下内容以寻求帮助,但他们并没有让我走得太远:

知道为什么身份验证失败吗?我需要在设置中添加一些内容吗?

from django.contrib.staticfiles.testing import StaticLiveServerTestCase
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from django.contrib.auth.models import User

from django.contrib.auth import authenticate


class AccountTestCase(StaticLiveServerTestCase):
    def setUp(self):
        self.selenium = webdriver.Chrome()
        super().setUp()
        User.objects.create(username='test', email='test@test.com', password='Test1234', is_active=True)

    def tearDownClass(self):
        self.selenium.quit()
        super().tearDown()

    def test_register(self):
        user = authenticate(username='test', password='Test1234')
        if user is not None: # prints Backend login failed
            print("Backend login …
Run Code Online (Sandbox Code Playgroud)

django selenium django-authentication django-tests

3
推荐指数
1
解决办法
1570
查看次数

Pydantic V2 - field_validator() 得到了意外的关键字参数“pre”

我正在从 Pydantic v1 迁移到 v2,并尝试将已弃用 @validator的所有用途替换为@field_validator.

但是,我之前使用过pre 验证器参数,在转到 后@field_validator,我收到以下错误:

TypeError: field_validator() got an unexpected keyword argument 'pre'
Run Code Online (Sandbox Code Playgroud)

V2 中是否也已弃用 pre 的使用?尽管有页面顶部警告,但V2 验证器文档中似乎仍然引用了它:

此页面仍需要更新 v2.0。

希望其他人已经解决了这个问题并可以提出最佳的前进路线。谢谢!

python pydantic

3
推荐指数
1
解决办法
2321
查看次数