0
私はformsetを持っており、各フォームをチェックして読み込みオブジェクトがターゲットオブジェクトよりも大きくないことを確認したいと思います。何らかの理由で私はこれが正常に動作するようにすることはできません。なぜなら、読み込みがまだ目標を上回っている場合、私のフォームエラーもまた表示されないからです。どのように各フォームをチェックして、各読み込みオブジェクトが私の目標オブジェクトよりも小さいことを検証し、どんな助けでも大いに感謝するでしょう。ここで formsetの検証が意図したとおりに機能しないdjango
はここで最終的にここviews.py
def update_inspection_vals(request, dim_id=None):
dims_data = Dimension.objects.filter(id=dim_id)
can_delete = False
dims = Dimension.objects.get(pk=dim_id)
sheet_data = Sheet.objects.get(pk=dims.sheet_id)
serial_sample_number = Inspection_vals.objects.filter(dimension_id=24).values_list('serial_number', flat=True)[0]
target = Dimension.objects.filter(id=24).values_list('target', flat=True)[0]
title_head = 'Inspect-%s' % dims.description
if dims.ref_dim_id == 1:
inspection_inline_formset = inlineformset_factory(Dimension, Inspection_vals, formset=BaseInspecitonFormSet, can_delete=False, extra=0, fields=('reading',), widgets={
'reading': forms.TextInput(attrs={'cols': 80, 'rows': 20})
})
if request.method == "POST":
formset = inspection_inline_formset(request.POST, request.FILES, instance=dims)
if formset.is_valid():
print True
new_instance = formset.save(commit=False)
for n_i in new_instance:
n_i.created_at = datetime.datetime.now()
n_i.updated_at = datetime.datetime.now()
n_i.save()
else:
print False
formset.errors
formset.non_form_errors()
return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
else:
formset = inspection_inline_formset(instance=dims, queryset=Inspection_vals.objects.filter(dimension_id=dim_id).order_by('serial_number'))
return render(request, 'app/inspection_vals.html',
{
'formset': formset,
'dim_data': dims_data,
'title':title_head,
'dim_description': dims.description,
'dim_target': dims.target,
'work_order': sheet_data.work_order,
'customer_name': sheet_data.customer_name,
'serial_sample_number': serial_sample_number,
})
の私の実際のフォームセットである私のget_dim_target機能
def get_dim_target(dim_id):
target = Dimension.objects.values_list('target', flat=True).filter(id=dim_id)
return target
ここ
class BaseInspecitonFormSet(BaseInlineFormSet):
def clean(self):
if any(self.errors):
return
reading = []
for form in self.forms:
dim_id = 24 #form.cleaned_data['dimension_id']
reading_data = form.cleaned_data['reading']
target = get_dim_target(dim_id)
for x_reading in reading:
if int(x_reading) > int(target):
print True
raise forms.ValidationError("Reading larger than target")
else:
print False
reading.append(reading_data)
views.py
の私のフォームセットの検証されています私のテンプレートです<h1>Inspeciton Values</h1>
<div class="well">
<form method="post">
{% csrf_token %}
<table>
{{ formset.management_form }}
{% for x in formset.forms %}
<tr>
<td>
Sample Number {{ forloop.counter0|add:serial_sample_number }}
</td>
<td>
{{ x }}
</td>
</tr>
{% endfor %}
</table>
<input type="submit" value="Submit Values" class="btn-primary" />
</form>
</div>
</div>