Django/Python - 覆盖初始加载值
Django/Python - overwrite initial loaded values
我是 Django 的新手,我一直在努力解决以下问题:
我有一个视图,最初有 set1=0(False) 和 set2=1(True)。用户可以交换它,因此设置 set1=1(True) 和 set2=0(False)。用户可以通过按 'Update' 按钮来执行此操作。我的问题是,它确实在后端发生了变化,但是 frontend/view/html 没有更新。我不知道为什么..
我创建了一个小示例,如果它有效,我也会让我的 Django 案例正常工作..
我有以下内容:
views.py
所以首先使用这个视图,设置set1和set2的初始值:
class MainSettingsView(generic.TemplateView):
extra_context = {"main_page": "active"}
context_object_name = 'main'
template_name = 'index.html'
set1 = int(model.set1 == True)
set2 = int(model.set2 == True)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
model = Setting12.objects.get(pk=1)
context['set1'] = int(model.set1 == True)
context['set2'] = int(model.set2 == True)
return context
然后,根据单选按钮中选择的选项,它会更改 model/db,因此也会更改 set1 和 set2:
class UpdateButton(generic.TemplateView):
extra_context = {"main_page": "active"}
context_object_name = 'setting12'
template_name = 'index.html'
def post(self, request, queryset=None, *args, **kwargs):
if update_type == "set1":
model = Setting12.objects.get(pk=1)
model.set1 = True
model.set2 = False
return redirect(reverse("main"))
elif update_type == "set2":
model = Setting12.objects.get(pk=1)
model.set1 = False
model.set2 = True
return redirect(reverse("main"))
对于上下文,这是我在html中使用的:
index.html
<form class="card" action="{% url 'setting12' %}" method="POST" enctype="multipart/form-data">
{% csrf_token %}
<h3 class="card-title">Update Settings</h3>
<input type="radio" name="update_type" value="set1" {% if view.set1 %}checked {%endif%}> set1
{% if view.set1 is 1 %} ( Current setting ) {% else %} {% endif %}</input>
<input type="radio" name="update_type" value="set2" {% if view.set2 %}checked {%endif%}> Set2
{% if view.set2 is 1 %} ( Current setting ) {% else %} {% endif %}</input>
<button class="btn btn-primary" type="submit">Update</button>
</form>
我确实看到数据库发生了变化,按下按钮时 set1 和 set2 的值发生了变化。但我还看到,当它从 MainSettingsView > UpdateButton > MainSettingsView 开始时,模型没有被重新读取……它不会再次遍历模型。所以我确实认为这是没有获得更新视图的问题。但是我找不到办法...
有人可以帮助我吗?到目前为止我花了几天时间:s
我终于明白了=D!!
通过删除我的 index.html
中的 view.
部分,并删除
set1 = int(model.set1 == True)
set2 = int(model.set2 == True)
我删除了无法再覆盖的整个初始设置。在那之后它完全起作用了:)
我是 Django 的新手,我一直在努力解决以下问题:
我有一个视图,最初有 set1=0(False) 和 set2=1(True)。用户可以交换它,因此设置 set1=1(True) 和 set2=0(False)。用户可以通过按 'Update' 按钮来执行此操作。我的问题是,它确实在后端发生了变化,但是 frontend/view/html 没有更新。我不知道为什么..
我创建了一个小示例,如果它有效,我也会让我的 Django 案例正常工作..
我有以下内容:
views.py
所以首先使用这个视图,设置set1和set2的初始值:
class MainSettingsView(generic.TemplateView):
extra_context = {"main_page": "active"}
context_object_name = 'main'
template_name = 'index.html'
set1 = int(model.set1 == True)
set2 = int(model.set2 == True)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
model = Setting12.objects.get(pk=1)
context['set1'] = int(model.set1 == True)
context['set2'] = int(model.set2 == True)
return context
然后,根据单选按钮中选择的选项,它会更改 model/db,因此也会更改 set1 和 set2:
class UpdateButton(generic.TemplateView):
extra_context = {"main_page": "active"}
context_object_name = 'setting12'
template_name = 'index.html'
def post(self, request, queryset=None, *args, **kwargs):
if update_type == "set1":
model = Setting12.objects.get(pk=1)
model.set1 = True
model.set2 = False
return redirect(reverse("main"))
elif update_type == "set2":
model = Setting12.objects.get(pk=1)
model.set1 = False
model.set2 = True
return redirect(reverse("main"))
对于上下文,这是我在html中使用的:
index.html
<form class="card" action="{% url 'setting12' %}" method="POST" enctype="multipart/form-data">
{% csrf_token %}
<h3 class="card-title">Update Settings</h3>
<input type="radio" name="update_type" value="set1" {% if view.set1 %}checked {%endif%}> set1
{% if view.set1 is 1 %} ( Current setting ) {% else %} {% endif %}</input>
<input type="radio" name="update_type" value="set2" {% if view.set2 %}checked {%endif%}> Set2
{% if view.set2 is 1 %} ( Current setting ) {% else %} {% endif %}</input>
<button class="btn btn-primary" type="submit">Update</button>
</form>
我确实看到数据库发生了变化,按下按钮时 set1 和 set2 的值发生了变化。但我还看到,当它从 MainSettingsView > UpdateButton > MainSettingsView 开始时,模型没有被重新读取……它不会再次遍历模型。所以我确实认为这是没有获得更新视图的问题。但是我找不到办法...
有人可以帮助我吗?到目前为止我花了几天时间:s
我终于明白了=D!!
通过删除我的 index.html
中的 view.
部分,并删除
set1 = int(model.set1 == True)
set2 = int(model.set2 == True)
我删除了无法再覆盖的整个初始设置。在那之后它完全起作用了:)