Я создаю небольшое веб-приложение для отслеживания моих заказов, у меня есть две модели:
Order (models.Model) "Эта модель для записи новых заказов"
class Order(models.Model):
customer= models.ForeignKey(Customer, null=True, on_delete= models.SET_NULL)
product= models.ForeignKey(Product, null=True, on_delete= models.SET_NULL)
date_created = models.DateTimeField(auto_now_add=True, null=True)
status = models.CharField(max_length=200, null=True, choices=CATEGOTRIES)
note = models.CharField(max_length=200, null=True)
OrderHistory (models.Model) "Эта модель для записи изменений для каждого заказа в любом поле"
class OrderHistory(models.Model):
version_num = models.AutoField(primary_key=True)
Order = models.ForeignKey(Order, null=True, on_delete= models.SET_NULL)
customer= models.ForeignKey(Customer, null=True, on_delete= models.SET_NULL)
product= models.ForeignKey(Product, null=True, on_delete= models.SET_NULL)
date_created = models.DateTimeField(auto_now_add=True, null=True)
status = models.CharField(max_length=200, null=True)
note = models.CharField(max_length=200, null=True)
View:
def update_orders(request,pk):
theOrder = Order.objects.get(id=pk)
theHistory = createOrderHistory({
'Order': theOrder.id,
'customer': theOrder.customer,
'product': theOrder.product,
'date_created': theOrder.date_created,
'status': theOrder.status,
'note': theOrder.note
})
print('The History of the order ',theHistory)
UpdateForm = createOrder(instance=theOrder)
theid = pk
if request.method == 'POST':
UpdateForm = createOrder(request.POST,instance=theOrder)
if theHistory.is_valid():
if UpdateForm.is_valid():
theHistory.save()
UpdateForm.save()
return redirect('home')
else:
UpdateForm = createOrder(instance=theOrder)
context = {'UpdateForm':UpdateForm}
return render(request,'accounts/updateOrder.html',context)
В функции View update_orders
беру функцию текущий заказ и сохраните его в OrderHistory
, а затем я сохраню новые изменения в Order
Model
, он работает нормально, но модель OrderHistory не включает новое изменение.
orderHistory
чтобы получить историю заказа
def orderHistory(request,pk):
theHistoryOfTheOrder = Order.objects.filter(id=pk).prefetch_related('Order')
#theHistoryOfTheOrder = Order.objects.filter(id=pk)
print('the query result is :',theHistoryOfTheOrder)
context = {'theHistoryOfTheOrder':theHistoryOfTheOrder}
return render(request,'accounts/orderHistory.html',context)
я пытался использовать prefetch_related()
, так как я получаю несколько записей, но из-за ошибки
Cannot find 'Order' on Order object, 'Order' is an invalid parameter to prefetch_related()
мне нужно получить все записи в Order и OrderHistory с одинаковыми идентификаторами orderID также являются правильным решением для преобразования истории или есть еще один хороший способ сделать это?