2014-10-01 91 views
0

我在這裏看過幾個答案,我無法得到這個工作。我正在嘗試創建一個模型表單,以便在用戶登錄網站後保存用戶的個人資料。問題是,當我嘗試渲染表單時,我得到一個空白頁面並且沒有錯誤。任何幫助都感激不盡。Django ModelForm不在模板中呈現

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> 

謝謝!

回答

3

當請求類型爲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條款在所有 - 如果窗體是無效的,它會自動發送上下文中的錯誤形式,和您的錯誤消息顯示得很好。

+0

我不敢相信我沒有看到,謝謝! – edalco9 2014-10-01 16:50:36