代码之家  ›  专栏  ›  技术社区  ›  lordVader

Django-模型形式未呈现

  •  0
  • lordVader  · 技术社区  · 7 年前

    我创建了一个表单来更新用户的配置文件,但是当我运行它时,没有错误,但是当我尝试打开页面时,会显示标题,但不会显示UpdateForm。其次,我想知道如何创建一个大文本框来存储某人的传记。

    模型。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
    

    形式。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
    

    意见。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')
    

    URL。py公司

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

    更新\u 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 %}
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   solarissmoke    7 年前

    您没有将任何上下文传递给 render() 方法-您定义 args 但不要对该变量做任何操作。将其更改为:

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