При попытке сохранения формы с деталями заказа вылетает вот такая ошибка: (1364, "Field 'order_item_id' doesn't have a default value")
Поле id является автоинкрементным первичным ключом, откуда тогда такая ошибка?
Модель:
class OrderItem(models.Model):
order = models.ForeignKey(Order, on_delete=models.CASCADE, related_name='items')
furniture = models.ForeignKey(Furniture, on_delete=PROTECT)
tex1 = models.ForeignKey(Tex, default=1, on_delete=PROTECT, related_name='tex1')
tex1_no = models.PositiveIntegerField('Номер в каталоге', default=1)
...
def __str__(self):
return f"{self.furniture} ({self.quantity})"
class Meta:
db_table = 'order_item'
verbose_name = "Позиция заказа"
verbose_name_plural = "Позиции заказа"
Форма:
class OrderItemForm(ModelForm):
furniture = ModelChoiceField(queryset=Furniture.objects.all(), empty_label='Модель не выбрана', label='Модель')
tex1 = ModelChoiceField(queryset=Tex.objects.all(), empty_label='Ткань не выбрана', label='Основная ткань')
tex2 = ModelChoiceField(queryset=Tex.objects.all(), empty_label='Ткань не выбрана', label='Ткань компаньон')
class Meta:
model = OrderItem
fields = '__all__'
widgets = {
'order': TextInput(),
'id': TextInput(),
}
Представление:
class orderItemCreateView(CreateView):
model = OrderItem
form_class = OrderItemForm
template_name = 'orders/orders/items/orderItemCreate.html'
def get_success_url(self):
return reverse('orderUpdate', args=[self.kwargs['pk']]) # перенаправление на страницу заказа
def form_valid(self, form):
form.instance.order = Order.objects.get(pk=self.kwargs['pk'])
print("FORM is VALID!!!")
return super().form_valid(form)
def form_invalid(self, form):
print("FORM is inVALID!!!", self.kwargs['pk'], self.request.POST)
return super().form_invalid(form)
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
kwargs.update({
'initial': {
'order': self.kwargs['pk'],
}
})
return kwargs
Шаблон:
<form method="POST">
{% csrf_token %}
{{ form.id }}
{{ form.order }}
<table border="1" bgcolor="white" width="100%">
<tr bgcolor="#320C8F">
<th rowspan="3">Категория<br>Модель<br>Основная ткань<br>Компаньон</th>
...
</table>
<button class="btn btn-success" type="submit">Сохранить</button>
<a href="{% url 'orders' %}" <button class="btn btn-warning">Отмена</button></a>
</form>
Также это происходит при сохранении вложенной формы
OrderItemInlineFormset = inlineformset_factory(Order, OrderItem, form=OrderItemForm, extra=1, can_delete=False)
Трйсбэк здесь