Почему мой ModelForm не показывает правильные настройки? - PullRequest
0 голосов
/ 19 января 2020

У меня есть две модели форм, одна для типов уведомлений и одна для настроек конфиденциальности. Оба показывают значения по умолчанию, а не то, что сохраняется в базе данных. Как сделать так, чтобы в форме отображался выбор, хранящийся в базе данных, а не значения по умолчанию? Пример. Предположим, пользователь выбрал для конфиденциальности «Прямое сообщение» «Друзья и подписчики». Когда они снова посещают страницу параметров конфиденциальности после сохранения изменений, вместо отображения того, что находится в базе данных, отображается «Открыть». Я попытался присвоить значения, сохраненные в базе данных, непосредственно форме при рендеринге страницы, когда запрос GET, но ничего не сделал, хотя отладочная печать показывает, что значение form.dm_privacy действительно то, что в базы данных, он по-прежнему показывает «Открыть».

Обе формы работают нормально, изменения сохраняются и все. Я не понимаю, почему это не отражает изменения, хотя это только то, что модельные формы делают, а не то, что я могу изменить?

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 %}

просмотров. 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 голосов
/ 19 января 2020

Исправлено путем изменения form = PrivacyOptionForm() на form = PrivacyOptionForm(instance=request.user)

...