How to load an instance in Django ModelForms

血红的双手。 提交于 2019-12-01 13:21:37
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 })

Your indentation was off and you never passed the site_profile to the form to have it populated. In the event of a POST request you don't want to pass the old version of site_profile to the form. I assume you want the new values the user has filled out in the template.

In my experience, assuming the default behavior as a GET request inside function-based views will avoid some mistakes and you will get rid off those if-else statements. If you are trying to edit an object you need to populate the form during GET request too:

def settings(request):
    site_profile = Site.objects.get(user=request.user)
    form = SiteForm(instance=site_profile) # GET method
    if request.method == "POST":
        # Don't forget the request.POST !
        form = SiteForm(request.POST, instance=site_profile)
        if form.is_valid():
            form.save()
            return redirect('dashboard_home')
    return render(request, "dashboard/settings.html", {'form': form })
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(instance = site_profile)

        return render(request, "dashboard/settings.html", {'form': form })
  1. the else block in line 12 has one indentation to much
  2. you must set the instance argument also in the else block
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!