簡體   English   中英

Django form.is_valid()每次都返回false

[英]Django form.is_valid() is returning false everytime

我已經創建了一個django應用程序。 在這種情況下,當我單擊index.html頁面上的更新按鈕時,它必須重定向到一個顯示具有3個字段(標題,用戶,正文)的表單的網頁。 每次我單擊更新時,該表單都不會生效。 它總是返回false。 實際上,如果我們按下更新按鈕,則用戶字段應顯示當前用戶的ID。 但是它顯示默認值。 身體字段每次都變為空。

forms.py:

class ImmediateForm(forms.ModelForm):
title = forms.CharField(widget=forms.TextInput(attrs={'readonly': 'readonly'}),initial="Immediate",max_length=20)
class Meta:
    model = Immediate
    fields = ['title','user','body',]
    widgets = {
        'user': TextInput(attrs={'readonly': 'readonly'})
    }

Models.py:

class Immediate(models.Model):
title = models.CharField(default="Immediate",max_length=30)
user = models.ForeignKey(User, default=1,on_delete=models.CASCADE)
body = models.TextField(default="")

def __str__(self):
    return self.title

views.py:

def update_immediate(request,pk):
if not request.user.is_authenticated:
    return render(request, 'set_goals/index.html')
else:
    print(pk)
    try:
        if request.method=='POST' :
            print('Inside if')
        immediate = Immediate.objects.get(user_id=pk)
        form = ImmediateForm(request.POST or None, instance=immediate or None)
        if form.is_valid():
            print("no")
            immediate = form.save(commit=False)
            immediate.user = request.user.username
            immediate.body = form.cleaned_data['body']
            immediate.save()
            return render(request, 'set_goals/detail_immediate.html', {'immediate': immediate})
        context = {
            "form": form,
        }
        return render(request, 'set_goals/create_template.html', context)
    except:
        if request.method=='POST' :
            print('Inside if')
        form = ImmediateForm(request.POST or None)
        if form.is_valid():
            print("yes")
            immediate = form.save(commit=False)
            immediate.user = request.user
            immediate.body = form.cleaned_data['body']
            immediate.save()
            return render(request, 'set_goals/detail_immediate.html', {'immediate': immediate})
        context = {
            "form": form,
        }
        return render(request, 'set_goals/create_template.html', context)

按鈕所在的html頁面:

index.html的:

    <div class="col-md-6">
          <div class="card mb-4">
              <div class="card-header">
    Immediate
  </div>
            <img class="card-img-top" style="width:495px;height:400px;" src="" alt="Card image cap">
            <div class="card-body">
              <h2 class="card-title">Empty for now</h2>
              <p class="card-text"></p>
                <form class="form-horizontal" role="form" action="" method="POST" enctype="multipart/form-data">
                <a href="{% url 'set_goals:update_immediate' user.id %}" class="btn btn-primary">Update &rarr;</a>
              <a href="{% url 'set_goals:detail_immediate' user.id %}" class="btn btn-primary">Read More &rarr;</a>
              </form>
                </div>

</div>
            </div>

這是什么錯誤? 為什么InstantForm()不起作用? 應該怎么做才能糾正這個問題?

要調試此錯誤,可以在form.is_valid之前或之后立即使用form.errors。 然后只是輸出到控制台,您會發現問題出在哪里。

暫無
暫無

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

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