Задать вопрос
Beerenfeld
@Beerenfeld

Как побороть ошибку (1364, "Field doesn't have a default value")?

При попытке сохранения формы с деталями заказа вылетает вот такая ошибка: (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)

Трйсбэк здесь
  • Вопрос задан
  • 34 просмотра
Подписаться 1 Простой 5 комментариев
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы