2017-12-18 295 views
0

我創建了一個表單來更新用戶的配置文件,但是當我運行它時,沒有任何錯誤,但是當我嘗試打開頁面時,表頭出現,但沒有出現UpdateBioForm。其次,我想知道如何創建一個大型文本框來存儲某人的傳記。Django - Modelform not rendering

Models.py

class UserProfile(models.Model): 
    user = models.OneToOneField(User) 
    biography = models.CharField(max_length = 255, default = '') 
    city = models.CharField(max_length=100, default = '') 
    website = models.URLField(default='') 
    image = models.ImageField(upload_to='profile_image', blank=True) 

    def setdefault(self, default_path='/profile_image/Default.jpg'): 
     if self.image: 
      return self.image 
     return default_path 

    def __str__(self): 
     return self.user.username 

Forms.Py

class UpdateBioForm(forms.ModelForm): 

    class Meta: 
     model = UserProfile 
     fields = (
      'biography', 
      'city', 
      'website' 
     ) 

    def save(self, commit=True): 
     savedBio = super(UpdateBioForm, self).save(commit=False) 
     savedBio.biography = self.cleaned_data['biography'] 
     savedBio.city = self.cleaned_data['city'] 
     savedBio.website = self.cleaned_data['website'] 

     if commit: 
      savedBio.save() 

     return savedBio 

Views.py

def update_bio(request): 
    if request.method == 'POST': 
     form = UpdateBioForm(request.POST, instance=request.user) 

     if form.is_valid(): 
      form.save() 
      return redirect('/') 
    else: 
     form = UpdateBioForm(instance=request.user) 
    args = {'form':form} 
    return render(request, 'accounts/update_bio.html') 

urls.py

url(r'^profile/updatebio/$',views.update_bio, name='update_bio'), 

update_bio.html

{% extends 'base.html' %} 

{% block body %} 
<div class="container"> 
    <h1>Update Biography</h1> 
    <form method="post"> 
     {% csrf_token %} 
     {{ form.as_p }} 
     <button type="submit">Submit</button> 
    </form> 
</div> 
{% endblock %} 
+0

無關,但爲什麼要覆蓋表單的save()方法? –

回答

1

您沒有傳遞任何情況下你render()方法 - 定義args但不要做與該變量什麼。將其更改爲:

args = {'form':form} 
return render(request, 'accounts/update_bio.html', context=args) # <-- You're missing context 
+0

是的,這工作。我不能相信我錯過了一個單詞。但傳記行出現在一行中輸入。如何獲得更大的文本框? – lordVader

+0

請參閱此問題以解答您的文本框問題:https://stackoverflow.com/questions/8761106/how-can-i-get-a-textarea-from-modelmodelform – solarissmoke