Django + Postgresql, новый экземпляр модели переписывает предыдущий

У меня есть модель Order и модель OrderDetails, которая представляет продукт, связанный с заказом. Один заказ может иметь много OrderDetails. Итак, я создаю новый заказ и нажимаю кнопку для добавления нового товара, и эта кнопка перенаправляет меня на страницу 'Add product', работающую с OrderDetailsCreateView. Я заполняю форму желаемым товаром и нажимаю "добавить", успех... Но не так быстро. Теперь, если я проверю базу данных, в ней есть новая строка OrderDetails, связанная с моим заказом. Когда я добавляю другой товар, я предполагаю, что он должен создать еще одну строку, потому что первичный ключ - order_id + product_id, но вместо этого он перезаписывает предыдущую строку. Я хочу, чтобы он добавлял новые строки и не трогал предыдущие.

Модель OrderDetails

class OrderDetails(models.Model):
    order = models.OneToOneField('Orders', models.DO_NOTHING, primary_key=True)
    product = models.ForeignKey('products.Products', models.DO_NOTHING, primary_key=True)
    unit_price = models.FloatField()
    quantity = models.SmallIntegerField()
    discount = models.FloatField()

    class Meta:
        managed = False
        db_table = 'order_details'
        unique_together = (('order', 'product'),)

    def get_absolute_url(self):
        return u'/orders/%d' % self.order.pk

Форма "Детали заказа"

class OrderDetailCreateOrUpdateForm(forms.ModelForm):
    def __init__(self, already_selected_products, *args, **kwargs):
        super(OrderDetailCreateOrUpdateForm, self).__init__(*args, **kwargs)
        self.fields['product'].queryset = self.fields['product'].queryset.exclude(id__in=already_selected_products)

    class Meta:
        model = OrderDetails
        fields = ['product', 'unit_price', 'quantity', 'discount']

OrderDetailsCreateView

class OrderDetailsCreateView(LoginRequiredMixin, CreateView):
    model = OrderDetails
    template_name = 'orders/orderdetails_create.html'
    form_class = OrderDetailCreateOrUpdateForm

    def get_form_kwargs(self, **kwargs):
        form_kwargs = super(OrderDetailsCreateView, self).get_form_kwargs(**kwargs)
        emp = get_current_users_employee(self.request.user)
        last_order = Orders.objects.filter(employee=emp, id=self.kwargs['pk'])[0]
        last_order_details = OrderDetails.objects.filter(order=last_order).values('product_id')
        already_selected_products = last_order_details
        form_kwargs['already_selected_products'] = already_selected_products
        return form_kwargs

    def form_valid(self, form):
        form.instance.order = Orders.objects.filter(employee=get_current_users_employee(self.request.user)).latest('id')
        #prods = OrderDetails.objects.filter(order=form.instance.order)
        #form.instance.product.queryset = Products.objects.exclude(id__in=prods)
        return super(OrderDetailsCreateView, self).form_valid(form)
Вернуться на верх