python - 如何在 Django ModelForms 中加载实例

标签 python django django-models django-forms django-views

我正在使用 Django 的用户模型。

如何让 Django ModelForm 预填充模板中的值?我知道我必须使用该表单的实例,但我在下面哪里出错了:

模型.py:

class Site(models.Model):
   user = models.ForeignKey(User, )
   site_name = models.CharField(max_length=128, blank=False, null=False)

表格.py:
class SiteForm(forms.ModelForm):
      class Meta:
            model = Site
            fields = '__all__'

View .py:
def settings(request):

    site_profile = Site.objects.get(user=request.user)

    if request.method == "POST":
        form = SiteForm( instance=site_profile )
            if form.is_valid():
                form.save()

                return redirect('dashboard_home')

        else:
            form = SiteForm()

        return render(request, "dashboard/settings.html", {'form': form })

此代码返回没有错误的页面,但不会使用数据库中的值预填充表单字段。

我只能假设 instance 没有正确加载?

最佳答案

def settings(request):
    if request.method == "POST":
        form = SiteForm(request.POST, instance=request.user.site_profile)
        if form.is_valid():
            form.save()
            return redirect('dashboard_home')
    site_profile = Site.objects.get(user=request.user)
    form = SiteForm(instance=site_profile)
    return render(request, "dashboard/settings.html", {'form': form })

您的缩进已关闭,并且您从未将 site_profile 传递给表单以填充它。如果出现 POST 请求,您不想将旧版本的 site_profile 传递给表单。我假设您想要用户在模板中填写的新值。

关于python - 如何在 Django ModelForms 中加载实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31406276/

相关文章:

python - 对具有相似行值的值求和

python - 如何使用正则表达式捕获 python 中两个连字符之间的单词?

python - 在 Mac OS X 上的 wxPython 中接受鼠标滚动手势

django - 使用 Django channel 的 Websocket

django - 使用 bootstrap3 作为脆皮表单的模板包时出现 TemplateDoesNotExist 错误

html - 使用 ModelForms 在 Django 中上传文件

django - 从模型获取模型类型的详细名称

python - Django - 使用配置文件扩展用户模型,但也使用不同的用户类型

python - 在pygame中发生碰撞后如何摆脱物体?

python - 在django开发环境下使用Docker、Gunicorn、Nginx却只能看到nginx欢迎页面?