![](/img/trans.png)
[英]How to display validation errors when WTForms is coupled with Jquery Form Plugin?
[英]How can I specify form validation errors when they occur?
我對Django Forms很新,而且我遇到了一個我無法解決的問題。 我一直在谷歌搜索和閱讀文檔,但我找不到這個解釋的地方。 我的問題是我有一個動物 Model
和一個ModelForm
:
class Animal(models.Model):
name = models.CharField(max_length=300)
age = models.PositiveSmallIntegerField()
race = models.ForeignKey(Race)
description = models.TextField()
state = models.ForeignKey(State)
pub_date = models.DateTimeField(auto_now_add=True)
adoption_limit = models.DateTimeField(blank=True, null=True)
location = models.ForeignKey(Location)
publisher = models.ForeignKey(User)
def __unicode__(self):
return self.name
class AnimalForm(ModelForm):
class Meta:
model = Animal
我通過urls.py呈現此信息,調用此視圖:
@login_required
def new_animal(request):
if request.method == "POST":
form = AnimalForm(request.POST)
if form.is_valid():
form.save()
return render_to_response('/')
else:
variables = RequestContext(request, {'e': form.errors})
return render_to_response('web/error.html', variables)
else:
form = AnimalForm()
variables = RequestContext(request, {'form': form})
return render_to_response('web/animal_form.html', variables)
似乎我在引入adoption_limit
字段時出錯,因此數據不會保存在DB中。 這是因為我只是在表單顯示的文本字段中設置了日期而不是時間。
我想知道如何做兩件事:
DateTimeField
相同的輸入類型? (使用Today和Now功能) 您在web/error.html
模板中編寫視圖,顯示表單錯誤的方式,只需輸出錯誤:
{%if e %}
You had some errors in your submission!<br />
{{ e }}
{% endif %}
但是,您沒有顯式傳遞錯誤列表,它是表單本身的一部分。 一點簡化:
variables = RequestContext(request, {'form': form})
return render_to_response('web/error.html', variables)
然后,在您的模板中:
{% if form.errors %}
You have some errors!<br />
{{ form.errors }}
{% endif %}
對於問題的第二部分 - 顯示django日期時間窗口小部件 - 事情變得更加復雜:
# First, you need to import the widget:
from django.contrib.admin.widgets import AdminSplitDateTime
from django.forms import TextField
# In your form class, you have to specify the widget
# for the field.
class AnimalForm(forms.ModelForm):
pub_date = models.TextField(widget=AdminSplitDateTime)
class Meta:
model = Animal
為了使其工作,您必須確保您的管理媒體目錄可以從您的項目訪問(因為所有的javascript和css都包含在那里)。 您還要確保還添加了所有樣式表。 從首選庫中使用您自己的javascript表單小部件會更容易(也更簡單)。
最后,如文檔中所述,如果覆蓋任何字段,則需要自己添加所有其他驗證邏輯:
如果你明確地實例化這樣的表單字段,Django假定你想要完全定義它的行為; 因此,不會從相應的模型中繪制默認屬性(例如max_length或required)。 如果要維護模型中指定的行為,則必須在聲明表單字段時明確設置相關參數。
burhan的回答很明顯。 另外,您可能希望隱藏表單上的發布者並在您的視圖中處理它。
為此,請將exclude =('publisher',)添加到ModelForm中的類Meta。
然后在你看來:
if form.is_valid():
animal = form.save(commit=false)
animal.publisher = request.user
animal.save()
否則,就目前而言,我認為您的表單會在下拉列表中顯示所有用戶,這可能不是您想要的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.