Django Внешнее соединение - PullRequest
0 голосов
/ 22 апреля 2020

Я создаю небольшое веб-приложение для отслеживания моих заказов, у меня есть две модели:

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 также являются правильным решением для преобразования истории или есть еще один хороший способ сделать это?

...