簡體   English   中英

Django ModelForm未在模板中呈現

[英]Django ModelForm not rendering in the template

我在這里查看了幾個答案,但無法正常工作。 我正在嘗試創建一個模型表單,該表單將在用戶注冊網站后保存用戶的個人資料。 問題是,當我嘗試呈現表單時,我得到了空白頁並且沒有錯誤。 任何幫助都感激不盡。

models.py

class Perfil(models.Model):
    user = models.OneToOneField(User)
    Sexo = models.CharField(max_length=100)
    Direccion = models.CharField(max_length=100)
    CP = models.CharField(max_length=100)
    Ciudad = models.CharField(max_length=100)
    Estado = models.CharField(max_length=100)
    Pais = models.CharField(max_length=100)
    Telefono = models.CharField(max_length=100)
    Celular = models.CharField(max_length=100)
    PaisPasaporte = models.CharField(max_length=100)
    NumeroPasaporte = models.CharField(max_length=100)
    VigenciaPasaporte = models.DateField(max_length=100)
    ContactoEmergencia = models.CharField(max_length=100)
    TelefonoEmergencia = models.CharField(max_length=100)
    CorreoEmergencia = models.CharField(max_length=100)
    Alergias = models.CharField(max_length=500)

forms.py

class ProfileForm(forms.ModelForm):
    class Meta:
        model = Perfil

views.py

@verified_email_required()
def profile(request):
    if request.method == "POST":
        form = ProfileForm(request.POST)
        if form.is_valid():
            perfil = form.save(commit=False)
            perfil.user = request.user
            perfil.save()
            return HttpResponseRedirect("/profile/")
        else:
            return render(request, "explore/profile.html", {"form": form})
    return render(request, "explore/profile.html")

最后是我的HTML

<form class="profile" id="profile_form" method="post" action="" style="width: 50%;">
                {% csrf_token %}
                {% for field in form %}
                    <table>
                    <colgroup>
                        <col style="width: 45%;">
                        <col style="width: 10%;">
                        <col style="width: 45%;">
                    </colgroup>
                    <tr>
                        <td>{{ field.label_tag }}</td>
                        <td></td>
                        <td>{{ field }}</td>
                    </tr>
                    </table>
                {% endfor %}
            </form>

謝謝!

當請求類型為POST時, 在上下文中發送表單。 頁面第一次加載時,默認情況下是GET請求。 因此,問題

這樣的事情應該起作用:

def profile(request):
    form = ProfileForm()
    if request.method == "POST":
        form = ProfileForm(request.POST)
        if form.is_valid():
            perfil = form.save(commit=False)
            perfil.user = request.user
            perfil.save()
            return HttpResponseRedirect("/profile/")

    return render(request, "explore/profile.html" {'form': form})

請注意,您根本不需要else子句-如果表單無效,它將自動在上下文中發送錯誤的表單,並且錯誤消息也可以很好地顯示。

暫無
暫無

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

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