【发布时间】:2020-05-18 04:18:26
【问题描述】:
我有一个显示在仪表板中的自定义引导表单。问题是,当用户进入仪表板时,他会立即看到验证错误,即使他还没有提交表单(文本字段应该是必需的)。
我不明白为什么会这样,感谢任何帮助! :) 问题图片(我不希望现在只在提交后显示红色的“必填字段”消息):
表格:
class MinitaskForm(forms.ModelForm):
class Meta:
model = Minitask
fields = ()
def __init__(
self,
data=None,
files=None,
auto_id="id_%s",
prefix=None,
initial=None,
error_class=ErrorList,
label_suffix=None,
empty_permitted=False,
instance=None,
use_required_attribute=None,
minitask=None,
):
super().__init__(
data,
files,
auto_id,
prefix,
initial,
error_class,
label_suffix,
empty_permitted,
instance,
use_required_attribute,
)
assert minitask is not None
self.fields["selected_choice"] = forms.CharField(
widget=forms.RadioSelect(
choices=[(val, val) for val in minitask.choices]
),
required=False,
label="Which of these emotions best describes your day?",
)
self.fields["reason"] = forms.CharField(label="Why?")
观看次数:
@login_required(login_url="login")
def dashboard(request):
task = request.user.current_weekly_task()
user_id = request.user.id
solutions = Solution.objects.filter(user_id=user_id)
minitask = request.user.current_minitask()
minitasks = request.user.minitask_set.filter(selected_choice__isnull=False)
if request.method == "POST":
if "minitask" in request.POST:
form = MinitaskForm(request.POST, minitask=minitask)
if "selected_choice" not in request.POST:
form.add_error("selected_choice", "Can't be blank")
messages.error(request, "You must pick your today's emotion")
if form.is_valid():
minitask.reason = request.POST["reason"]
minitask.selected_choice = request.POST["selected_choice"]
minitask.user = request.user
minitask.save()
messages.success(request, "Your daily status has been updated.")
return redirect("dashboard")
else:
mini_form = MinitaskForm(
minitask=minitask,
data={
"reason": minitask.reason,
"selected_choice": minitask.selected_choice,
},
)
return render(
request,
"app/dashboard.html",
{
"solutions": solutions,
"task": task,
"mini_form": mini_form,
"minitask": minitask,
"minitasks": minitasks,
"user": request.user,
},
)
模板:
<form method="POST" class="post-form">
{% csrf_token %}
{% bootstrap_form mini_form %}
<button
type="Submit"
id="minitask-button"
class="save btn btn-pink"
name="minitask"
>Save minitask</button>
</form>
【问题讨论】:
标签: python django forms bootstrap-4