2016-12-15 87 views
0

我正在嘗試創建一個「編輯配置文件」頁面/表單,並且遵循SimpleIsBetterThanComplex教程,介紹如何通過OneToOne鏈接擴展用戶模型。但是,當我嘗試顯示用戶配置文件表單以允許用戶更新他們的配置文件時,表單根本不顯示,除了提交按鈕...任何想法,我可能在這裏出錯了?Django表單不能以模板顯示

models.py

from __future__ import unicode_literals 
from django.db import models 
from django.contrib.auth.models import User 
from django.db.models.signals import post_save 
from django.dispatch import receiver 
from django.utils import timezone 

class Profile(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE) 

    #account types 
    is_userA = models.BooleanField('User A', default=True) 
    is_userB = models.BooleanField('User B', default=False) 
    is_superuser = models.BooleanField('SuperUser', default=False) 

    #other fields here 
    avatar = models.ImageField('avatar', upload_to='static/media/images/avatars/', null=True, blank=True) 
    phone = models.CharField('phone number', max_length=20, blank=True, default='') 
    address = models.CharField('address', max_length=100, default='', blank=True) 
    city = models.CharField('city', max_length=100, default='', blank=True) 
    state = models.CharField('state', max_length=2, default='', blank=True) 
    country = models.CharField('country', max_length=100, default='', blank=True) 
    date_joined = models.DateTimeField(default=timezone.now) 

    @receiver(post_save, sender=User) 
    def create_user_profile(sender, instance, created, **kwargs): 
     if created: 
      Profile.objects.create(user=instance) 

    @receiver(post_save, sender=User) 
    def save_user_profile(sender, instance, **kwargs): 
     instance.profile.save() 

forms.py

class UserForm(forms.ModelForm): 
    class Meta: 
     model = User 
     fields = ('first_name', 'last_name', 'email') 

views.py

@login_required 
@transaction.atomic 
def update_profile(request): 
    if request.method == 'POST': 
     user_form = UserForm(request.POST, instance=request.user) 
     if user_form.is_valid(): 
      user_form.save() 
      messages.success(request, _('Your profile was successfully updated!')) 
      return redirect('settings:profile') 
     else: 
      messages.error(request, _('Please correct the error below.')) 
    else: 
     user_form = UserForm(instance=request.user) 
    return render(request, 'profiles/profile.html', { 
     'user_form': user_form, 
    }) 

模板

<div class="col-md-12"> 
    <div class="mb32"> 
    <h5 class="uppercase">General Information</h5> 
    </div> 
    <div class="row"> 
    <form method="post"> 
    {% csrf_token %} 
    {{ user_form.as_p }} 
    <button type="submit">Save changes</button> 
    </form> 
+0

顯示您的模板 –

+0

@ZagorodniyOlexiy將模板代碼添加到原始文章 – Nick

+0

您的意思是表單沒有呈現,或者您可以看到名字,姓氏和電子郵件字段,並且沒有看到配置文件的字段,如頭像,手機等? – neverwalkaloner

回答

0

你的觀點尋找現在看起來是這樣的: views.py

@login_required 
@transaction.atomic 
def update_profile(request): 
    if request.method == 'POST': 
     user_form = UserForm(request.POST, instance=request.user) 
     if user_form.is_valid(): 
      user_form.save() 
      messages.success(request, _('Your profile was successfully updated!')) 
      return redirect('settings:profile') 
     else: 
      messages.error(request, _('Please correct the error below.')) 
    else: 
     user_form = UserForm(instance=request.user) 
    return render(request, 'profiles/profile.html', { 
     'user_form': user_form, 
    }) 

根據這個觀點,如果POST方法,您從表單驗證照耀處的數據,但是當它的GET方法,你只是定義UserForm,所以我認爲你必須在最後一行縮進: views.py

@login_required 
@transaction.atomic 
def update_profile(request): 
    if request.method == 'POST': 
     user_form = UserForm(request.POST, instance=request.user) 
     if user_form.is_valid(): 
      user_form.save() 
      messages.success(request, _('Your profile was successfully updated!')) 
      return redirect('settings:profile') 
     else: 
      messages.error(request, _('Please correct the error below.')) 
    else: 
     user_form = UserForm(instance=request.user) 
     return render(request, 'profiles/profile.html', { 
     'user_form': user_form, 
    }) 

因此,您的最後一行return render(request, 'profiles/profile.html', {'user_form': user_form,})必須在else聲明之下,據我瞭解,導致其GET