簡體   English   中英

Django表單驗證:空白時必填字段不顯示錯誤

[英]Django form validation: required fields not displaying errors when blank

即時通訊試圖建立一些簡單的驗證規則的簡單形式。

我遇到的問題是,當我嘗試提交表單時,應該是必填字段不會導致任何驗證提示出現在表單頁面中。 與之類似,當我提交一個完全空白的表單時,我將被重定向到指定的頁面,而不顯示任何驗證錯誤提示。

表單實際上並沒有向數據庫發送任何數據,因此看起來is_valid函數運行正常,並且如果我輸入應該為整數的字符串,我會得到正確的錯誤消息。 因此,我想知道您是否通常需要進行一些額外的編碼才能顯示一些“必填字段”消息。 目前,我讓django負責所有驗證,並且我沒有創建任何自定義規則。 這是一些代碼:

該模型

class Advert(models.Model):
    user = models.ForeignKey(User)
    category = models.ForeignKey('Category')
    title = models.CharField(max_length=100, null=False, blank=False)
    description = models.TextField()
    price = models.IntegerField(null=False, blank=False)
    image = models.FileField(upload_to=get_upload_file_name, null=True)
    location = models.CharField(max_length=50, null=False, blank=False)
    pub_date = models.DateField(auto_now_add=True)

我要注意的是,在將這些添加到模型后,makemigrations沒有檢測到更改,但是我認為當未明確指定時,它假定null = False? 在ModelForm中,是否要求required = True也被假定為否?

表格

class AdvertForm(forms.ModelForm):
    class Meta:
        model = Advert
        exclude = ['user']

查看文件

def create_advert(request):
    if request.POST:
        form = AdvertForm(request.POST, request.FILES)
        if form.is_valid():
            ad = form.save(False)
            ad.user = request.user
            ad.save()

        return HttpResponseRedirect('/adverts/list_adverts/0/')

    else:
        c = {}
        c.update(csrf(request))
        c['form'] = AdvertForm()
        return render(request, 'create_advert.html', c)

因此is_valid在工作,該記錄未保存,但是我沒有收到錯誤提示,將必填字段留空。

我有什么想念的嗎?

因為即使表單無效,您也要進行重定向。 相反,您應保持相同的視圖並重新呈現表單。 視圖應如下所示:

def create_advert(request):
    if request.POST:
        form = AdvertForm(request.POST, request.FILES)
        if form.is_valid():
            ad = form.save(commit=False)
            ad.user = request.user
            ad.save()
            return HttpResponseRedirect('/adverts/list_adverts/0/')

    else:
        form = AdvertForm()

    return render(request, 'create_advert.html', {'form': form})

(請注意,手動添加CSRF令牌沒有意義,因為您使用的是render快捷方式,因此上下文處理器會這樣做。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM