[英]Django error message: ["'on' value must be either True or False."]
[英]Django ValidationError: ["“('1',)” value must be either True, False, or None."]
為什么我收到這個錯誤? [““('1',)” 值必須是 True、False 或 None。”]我是否遺漏了代碼中的某些內容? 我正在嘗試更新數據,但收到此錯誤。
這是我的 html
<input type="checkbox" name="Ubo" value="1" {% if feedback.q5Ubo %}checked="check" {% endif %}>
<input type="checkbox" name="Lagnat" value="1" {% if feedback.q5Lagnat %}checked="check" {% endif %}>
<input type="checkbox" name="Sipon" value="1" {% if feedback.q5Sipon %}checked="check" {% endif %} >
<input type="checkbox" name="Lbm" value="1" {% if feedback.q5LBM %}checked="check" {% endif %}>
這是我的views.py
Ubo = request.POST.get('Ubo') or 0
Lagnat = request.POST.get('Lagnat') or 0
Sipon = request.POST.get('Sipon') or 0
Lbm = request.POST.get('Lbm') or 0
這是我的models.py
q5Ubo = models.BooleanField(default=False, blank=True, null=True)
q5Lagnat = models.BooleanField(default=False, blank=True, null=True)
q5Sipon = models.BooleanField(default=False, blank=True, null=True)
q5LBM = models.BooleanField(default=False, blank=True, null=True)
更新我更改了我的 html 和 views.py
html
<input type="checkbox" name="Ubo" value=True>
<input type="checkbox" name="Lagnat" value=True >
<input type="checkbox" name="Sipon" value=True >
<input type="checkbox" name="Lbm" value=True >
視圖.py
Ubo = bool(request.POST.get('Ubo')) or False
Lagnat = bool(request.POST.get('Lagnat')) or False
Sipon = bool(request.POST.get('Sipon')) or False
Lbm = bool(request.POST.get('Lbm')) or False
這是回溯
Traceback (most recent call last):
File "/home/MyHealth/contacttracingapp/ctenv/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
response = get_response(request)
File "/home/MyHealth/contacttracingapp/ctenv/lib/python3.8/site-packages/django/core/handlers/base.py", line 179, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/MyHealth/contacttracingapp/TracingSettings/TracingApp/views.py", line 865, in Data
insert_2tab.save()
File "/home/MyHealth/contacttracingapp/ctenv/lib/python3.8/site-packages/django/db/models/base.py", line 753, in save
self.save_base(using=using, force_insert=force_insert,
File "/home/MyHealth/contacttracingapp/ctenv/lib/python3.8/site-packages/django/db/models/base.py", line 790, in save_base
updated = self._save_table(
File "/home/MyHealth/contacttracingapp/ctenv/lib/python3.8/site-packages/django/db/models/base.py", line 872, in _save_table
updated = self._do_update(base_qs, using, pk_val, values, update_fields,
File "/home/MyHealth/contacttracingapp/ctenv/lib/python3.8/site-packages/django/db/models/base.py", line 926, in _do_update
return filtered._update(values) > 0
File "/home/MyHealth/contacttracingapp/ctenv/lib/python3.8/site-packages/django/db/models/query.py", line 803, in _update
return query.get_compiler(self.db).execute_sql(CURSOR)
File "/home/MyHealth/contacttracingapp/ctenv/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 1522, in execute_sql
cursor = super().execute_sql(result_type)
File "/home/MyHealth/contacttracingapp/ctenv/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 1143, in execute_sql
sql, params = self.as_sql()
File "/home/MyHealth/contacttracingapp/ctenv/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 1488, in as_sql
val = field.get_db_prep_save(val, connection=self.connection)
File "/home/MyHealth/contacttracingapp/ctenv/lib/python3.8/site-packages/django/db/models/fields/__init__.py", line 823, in get_db_prep_save
return self.get_db_prep_value(value, connection=connection, prepared=False)
File "/home/MyHealth/contacttracingapp/ctenv/lib/python3.8/site-packages/django/db/models/fields/__init__.py", line 818, in get_db_prep_value
value = self.get_prep_value(value)
File "/home/MyHealth/contacttracingapp/ctenv/lib/python3.8/site-packages/django/db/models/fields/__init__.py", line 967, in get_prep_value
return self.to_python(value)
File "/home/MyHealth/contacttracingapp/ctenv/lib/python3.8/site-packages/django/db/models/fields/__init__.py", line 957, in to_python
raise exceptions.ValidationError(
Exception Type: ValidationError at /Data/
Exception Value: ['“(False,)” value must be either True, False, or None.']
這是我的完整views.py
q1 = request.POST.get('q1')
q2 = request.POST.get('q2')
q2Reason = request.POST.get('q2Reason')
q3 = request.POST.get('q3')
q4 = request.POST.get('q4')
q4Reason = request.POST.get('q4AnswerDetailed')
q5 = request.POST.get('q5')
q6visitedPlacesDuringNonWorkingDays = request.POST.get('q6visitedPlacesDuringNonWorkingDays')
Ubo = bool(request.POST.get('Ubo')) or False
Lagnat = bool(request.POST.get('Lagnat')) or False
Sipon = bool(request.POST.get('Sipon')) or False
Lbm = bool(request.POST.get('Lbm')) or False
paghinga = bool(request.POST.get('paghinga')) or False
Pananakit = bool(request.POST.get('Pananakit')) or False
katawan = bool(request.POST.get('katawan')) or False
Pagkawala = bool(request.POST.get('Pagkawala')) or False
insert_2tab = TrEmployeeSuppliersFeedbackQuestionsSubmittedRecords(
dateSubmitted=datenow,
fmCustomerID=company,
fmCustomerEmployeeSupplierID=fmCustomerEmployeeSupplierID,
q1Answer=q1,
q2Answer=q2,
q2AnswerDetailed=q2Reason,
q3Answer=q3,
q4Answer=q4,
q4AnswerDetailed=q4Reason,
q5Answer=q5,
q5Ubo=Ubo,
q5Lagnat=Lagnat,
q5Sipon=Sipon,
q5LBM=Lbm,
q5HirapSaPaghinga=paghinga,
q5PananakitngUlo=Pananakit,
q5PananakitngKatawan=katawan,
q5PagkawalaNgPangAmoyatPanlasa=Pagkawala
)
insert_2tab.save()
我不確定為什么您的“手寫表單”不起作用,我懷疑大多數其他用戶也不知道,因為您不應該手寫表單!
如果我向您展示如何在您的設置中使用表單,這對我們雙方都會容易得多。
在傳統上稱為forms.py
的文件中,為您的模型創建一個新的表單類:
from django import forms
from .models import TrEmployeeSuppliersFeedbackQuestionsSubmittedRecords as ThisNameIsTooLong
class ThisNameIsTooLongForm(forms.ModelForm):
class Meta:
model = ThisNameIsTooLong
fields = '__all__'
現在,在您的views.py
:
from django.shortcuts import render, redirect
form django.core.exceptions import ValidationError, SuspiciousOperation
from .forms import ThisNameIsTooLongForm
def my_view(request):
form = ThisNameIsTooLongForm(request.POST or None)
if request.method == 'GET':
context = {'form': form}
return render(request, 'my_template.html', context)
if request.method == 'POST':
if form.is_valid():
form.save()
# handle valid form here. eg:
return redirect('some_view')
else:
# handle invalid form
raise ValidationError('form was invalid')
# method was neither "GET" nor "POST", raise a 405: Method Not Allowed
raise SuspiciousOperation(405)
最后,在my_template.html
,您需要通過傳遞給模板上下文的表單對象來呈現表單:
<form method="POST"> {% csrf_token %}
{{ form.as_ul }}
<button>save</button>
</form>
我不確定您的feedback
對象來自哪里,所以我忽略了表單輸入值的編程切換。 如果您想要與當前設置具有相同的功能,則需要找到一種方法將feedback
傳遞給表單的__init__
,例如:
feedback = {'q5Ubo': True}
form = ThisNameIsTooLongForm(request.POST or None, feedback=feedback)
在你的表單類中:
class ThisNameIsTooLongForm(forms.ModelForm):
class Meta:
model = ThisNameIsTooLong
fields = '__all__'
def __init__(self, *args, feedback=None, **kwargs):
super().__init__(*args, **kwargs)
if feedback is not None:
for key, value in feedback.items():
self.initial[key] = value
如果你還沒有讀過form docs
你真的應該讀一讀。
您已將字段創建為布爾值。 所以它應該返回True
或False
。 此外,它將接受None
,因為您已添加 null = True。
但是您當前從 HTML 獲得的值是一個字符串。 您必須將其轉換為布爾值。
Ubo = bool(request.POST.get('Ubo'))
更新:根據@ElrondSupportsMonica, or False
不需要or False
。 .get(key, default=None, /)
將返回鍵,如果鍵在那里,否則將返回默認值。 對於默認值,我們有None
。 bool(None)
將是 False。 So or False 是不需要的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.