Первое предложение - опубликовать трассировку стека или даже просто основное исключение; всегда более полезно знать, что он кричит.
Сначала я предполагаю, что вы передаете позиционные аргументы, а модель не знает, что делать с каким аргументом.
Мое второе предположение заключается в том, что вы передаете в несохраненных экземплярах Item(Cart()...)
полям внешнего ключа, которые не могут быть обнулены, поэтому django или база данных будут жаловаться, если вы не передадите действительный экземпляр Cart
с определенным идентификатором.
Итак, явно определите, какие поля вы передаете в конструктор, и убедитесь, что вы передаете в сохраненных экземплярах (не Cart()
, а Cart.objects.get(id=X)
)
cart = Cart.objects.latest('id')
item = Item(cart=cart, etc.)
item.save()