Django单一字段验证cleaned_data

tuwxkamq  于 2022-11-18  发布在  Go
关注(0)|答案(1)|浏览(116)

我是django的新手,正在学习验证主题。现在我有一个关于单字段验证和cleaned_data字典的问题。我运行django 3.2。在我的model.py中有这样的表:

class Personen(models.Model):
    DEUTSCHLAND = 'DE'
    SCHWEIZ = "CH"
    ÖSTERREICH = "AT"
    ENGLAND = "UK"
    NATION_CHOICES = [
        (DEUTSCHLAND, "Deutschland"),
        (SCHWEIZ, "Schweiz"),
        (ÖSTERREICH, "Österreich"),
        (ENGLAND, "England"),
    ]
    vorname = models.CharField(max_length=200)
    nachname = models.CharField(max_length=200)
    username = models.CharField(max_length=200)
    stadt = models.CharField(max_length=15, validators=[
                             validate_nation_regexval], null=True)
    nationalität = models.CharField(
        max_length=2, choices=NATION_CHOICES, default=DEUTSCHLAND)
    biere = models.ManyToManyField("Bier", through="PersonenBier")

    def __str__(self):
        return self.username

我在www.example.com中导入了这个字段forms.py,并且我想验证字段'username'。

class PersonenForm(ModelForm):
    class Meta:
        model = Personen
        fields = '__all__'

    def clean_username(self):
        print(self.cleaned_data)
        username_passed = self.cleaned_data["username"]
        username_req = "user_"
        if not username_req in username_passed:
            raise ValidationError("Ungültig")
        return username_passed

到目前为止一切正常,但我感到困惑的是,正如我所预料的,cleaned_data dict只包括“username”字段。为什么dict中还有“vorname”和“nachname”键?
console output cleaned_data dict
感谢您发送编修。

erhoui1w

erhoui1w1#

cleaned_data会呼叫clean()方法,让它包含所有验证的字段。
摘录自以下文档:
干净的--()方法在表单子类上被调用--其中被替换为表单字段属性的名称。此方法执行特定于该特定属性的任何清理,与字段的类型无关。此方法不传递任何参数。您需要在self.cleaned_data中查找字段的值,并记住此时它将是一个Python对象。而不是在表单中提交的原始字符串**(它将在cleaned_data中,因为上面的通用字段clean()方法已经清理了数据一次)**。
您可以在上面我分享的链接中阅读表单验证步骤。

相关问题