2016-11-30 95 views
1

工作,我有一個字段驗證模型的Django模型驗證不上創建

from django.db import models 
from django.core.validators import MinValueValidator, MaxValueValidator 

class MyModel(model.Model): 
    name = models.CharField() 
    size = models.IntegerField(validators=[MinValueValidator(1),MaxValueValidator(10)]) 

驗證器在Django管理面板運作良好,而我試着輸入數值超過10,它顯示了我錯誤消息'確保此值小於或等於10'並且不允許保存。

但是,當我在django shell中嘗試時,驗證器不工作,它允許保存記錄,我不知道驗證器爲什麼不在這裏拋出錯誤消息。

>>>form app.models import MyModel 
>>>MyModel.objects.create(name="Some Name", size=15) 
<MyModel: Some Name> 

如果我錯過了任何錯誤或者我在這裏做過任何錯誤,您能否建議我?請幫助我解決這個問題,對我來說會非常棒,預先感謝。

+0

下面的答案是否解決了您的查詢?如果是的話,請立即投票並接受。 – user2722127

回答

2

Django的驗證進行模型驗證主要是在DB級應用程序級驗證,而不是驗證。模型驗證不會在模型的save/create上自動運行。如果你想在你的代碼的特定時間驗證你的值,那麼你需要手動完成。

例如:

from django.core.exceptions import ValidationError 
form app.models import MyModel 

instance = MyModel(name="Some Name", size=15) 
try: 
    instance.full_clean() 
except ValidationError: 
    # Do something when validation is not passing 
else: 
    # Validation is ok we will save the instance 
    instance.save() 

更多信息,你可以在Django的文檔https://docs.djangoproject.com/en/1.10/ref/models/instances/#validating-objects

在管理它會自動工作,因爲所有的模型形式(ModelForm)將運行模型驗證過程一起表單驗證見。

如果您需要驗證數據,因爲它來自不可信來源(用戶輸入),則需要使用ModelForm s,並且僅在形式有效時才保存模型。