簡體   English   中英

Django的; 當我嘗試提交無效數據時,POST請求不起作用

[英]Django; POST request doesn't work when I try to submit invalid data

我發現某些表格沒有顯示錯誤消息,所以我嘗試這樣做。

def add_entry(request):

    if request.method != 'POST':
        form = EntryForm(user=request.user)
    else:
        form = EntryForm(request.POST, user=request.user)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(reverse_lazy('blog:list_entry'))
        else:
            print("error happened.")

    context = {
        'form': form,
    }
    return render(request, 'blog/add_entry.html', context)

即使我嘗試提交無效的數據,它也不會輸出任何內容。

html

<form method="POST">
    {% csrf_token %}
    <div class="form-group">
        {{ form.description.errors }}
        <label>{{ form.description.label }}</label>
        {{ form.description|add_class:'form-control' }}
    </div>
    <button type="submit" class="btn btn-primary">Post</button>
</form>

models.py

class Entry(models.Model):
    description = models.TextField(max_length=512)
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)

forms.py

class EntryForm(forms.ModelForm):

    class Meta:
        model = Entry
        fields = ['description']


    def __init__(self, *args, **kwargs):
        self.user = kwargs.pop('user')
        super().__init__(*args, **kwargs)


    def save(self):
        entry = super().save(commit=False)
        entry.user = self.user
        entry.save()
        return entry

當我提交有效數據時,該表格可以使用。 我有什么錯嗎?

聽起來好像您的瀏覽器驗證阻止了description字段為空時提交表單。

您可以通過向表單添加novalidate來解決此問題。 然后,瀏覽器將允許您提交帶有description=""的請求,並且您應該在響應中看到Django的錯誤。

<form method="POST" novalidate>
    {% csrf_token %}
    <div class="form-group">
        {{ form.description.errors }}
        <label>{{ form.description.label }}</label>
        {{ form.description|add_class:'form-control' }}
    </div>
    <button type="submit" class="btn btn-primary">Post</button>
</form>

暫無
暫無

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

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