Я просмотрел более дюжины потоков SO в django формах проверки, но не смог понять, почему моя форма не проверяет и не выводит никаких ошибок.
Форма создается на основе модель и загружается с двумя настраиваемыми параметрами item
и size_choices
.
Я предполагаю, что каким-то образом инициализация моей формы ошибочна? Я также подумал, что, возможно, это потому, что я создаю форму только для подмножества полей модели, но еще не заполняю все поля модели, согласно django документации , этого не должно быть проблема, поскольку проверяются только включенные поля.
Вот упрощенные коды модели, формы, представления и шаблона:
модель:
class Order(models.Model):
# item description
item = models.ForeignKey(Item, on_delete=models.CASCADE)
itemSizes = [(s,s.upper()) for s in ['xxs','xs','s','m','l','xl','xxl','xxxl','count']]
size = models.CharField("Item size", max_length = 5, choices = itemSizes)
quantity = models.IntegerField(default=1)
class Recipient(models.TextChoices):
TEAM = 'TEAM MEMBER'
RETAIL = 'RETAIL'
recipient = models.CharField(max_length=11, choices = Recipient.choices, default=Recipient.RETAIL)
date = models.DateField('date of order',auto_now_add=True)
форма:
class itemOrderForm(forms.ModelForm):
def __init__(self,size_choices = None,item=None ,*args,**kwargs):
super().__init__(*args,**kwargs) #itemOrderForm,self
if size_choices:
self.fields['size'].choices = size_choices
self.fields['item'].initial = item
#self.fields['item'].disabled=True
#print("GOT HERE")
class Meta:
model = Order
fields = ('item','size', 'quantity')
вид:
def orderCart(request):
context = {}
if request.method == 'POST':
form = itemOrderForm(request.POST)
print(form.is_valid())
print(form.errors) #this doesn't print anything
if form.is_valid():
print("VALID!!!")
item = Item.objects.all()[0]
context['form'] = itemOrderForm(size_choices =[('s','S'),('m','M')],item=item)
return render(request, 'inv_check/ordercart.html', context)
шаблон:
{% extends 'inv_check/base.html' %}
{% block content %}
<div class="container">
<form method="post" >
{% csrf_token %}
{{ form.as_table }}
<td><input type="submit" value="Add to cart"/></td>
</form>
</div>
{% endblock %}