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