为什么我的ModelForm无法显示正确的设置?

时间:2020-01-19 18:41:36

标签: django django-models django-forms django-templates django-views

我有两个模型表格,一个用于通知类型,一个用于隐私设置。两者都显示默认值,而不显示数据库中保存的内容。如何使表单显示存储在数据库中的选择而不是默认值?示例:假设用户选择“朋友和关注者”的直接消息隐私。当他们保存更改后再次访问隐私选项页面时,它显示“打开”,而不是反映数据库中的内容。当请求为GET时,呈现页面时,我尝试将数据库中保存的值直接分配给表单,尽管调试打印显示form.dm_privacy的值为确实是数据库中的内容,它仍然显示“打开”。

两种形式都可以正常工作,所做的更改已保存,所有内容均已保存。我不明白为什么它没有反映出这些变化,这仅仅是Model Forms所做的事情,而不是我可以更改的事情吗?

privacy_options.html

{% extends "accbase.html" %}
{% block content %}
<h1>Privacy Options</h1>
<form method="post">
    {% csrf_token %}
    {{form.as_p}}
    <button type="submit">Save</button>
</form>
{% endblock %}

views.py

@login_required
def privacy_options(request):
    """
    Holds all privacy options such as.. open/closed DMs, who can see profile/posts on profile
    """
    if request.method == "POST":
        form = PrivacyOptionForm(request.POST)
        if form.is_valid():
            print("Before saving:",request.user.dm_privacy, request.user.profile_privacy, request.user.included_in_find_friends) 
            user = request.user.username
            request.user.dm_privacy = form.cleaned_data['dm_privacy']
            request.user.profile_privacy = form.cleaned_data['profile_privacy']
            request.user.included_in_find_friends = form.cleaned_data['included_in_find_friends']
            request.user.save()
            print("After save:",request.user.dm_privacy, request.user.profile_privacy, request.user.included_in_find_friends) 
            return render(request, 'acc_manage/acc_nav.html', {'username':user})
    else:
        form = PrivacyOptionForm()
        form.included_in_find_friends = request.user.included_in_find_friends
        form.profile_privacy = request.user.profile_privacy
        form.dm_privacy = request.user.dm_privacy
        print("\n\n",form.dm_privacy, "\n\n") 
        return render(request, 'acc_manage/privacy_options.html', {'form': form})

1 个答案:

答案 0 :(得分:0)

通过将form = PrivacyOptionForm()更改为form = PrivacyOptionForm(instance=request.user)

来解决