Я работаю над проектом Django, в котором у меня есть модель (заказ), которая содержит различные заказы, полученные от клиентов. Я пытаюсь обновить один из полей Order (статус) с помощью id с помощью UpdateView (CancelOrder). Я написал UpdateView и изменил urls.py, но когда я пытаюсь обновить статус заказа по URL-адресу, я получаю сообщение об ошибке: Не найдено порядка поиска по запросу, несмотря на то, что у вас несколько заказов. Мой вопрос: почему UpdateView не видит мои данные модели? Я что-то пропустил?Почему мой Django UpdateView не видит мои данные модели (в частности, id/pk)?
Views.py
from django.shortcuts import render, redirect, HttpResponse
from django.core.exceptions import *
from django.views.generic.edit import UpdateView
from menu.models import Item, Order, Customer
from menu.forms import OrderForm, CustForm, UpdateForm
from .serializers import ItemSerializer
from rest_framework import generics
class CancelOrder(UpdateView):
model = Order
field = ('status',)
urls.py
from django.conf.urls import url, patterns, include
from . import views
from rest_framework.urlpatterns import format_suffix_patterns
urlpatterns = patterns('',
url(r'^$', views.CreateOrder, name='CreateOrder'),
url(r'^vieworder/', views.ViewOrder, name='ViewOrder'),
url(r'^confirmation/', views.ConfirmOrder, name='ConfirmOrder'),
url(r'^api/$', views.ItemList.as_view()),
url(r'^api/(?P<pk>[0-9]+)/$', views.ItemDetail.as_view()),
url(r'^cancel/(?P<pk>[0-9]+)/$', views.CancelOrder.as_view(), name='CancelOrder'),
)
urlpatterns = format_suffix_patterns(urlpatterns)
Модель
class Order(models.Model):
order_date = models.DateField(default=timezone.now)
delivery_date = models.DateField(default=timezone.now)
status = models.CharField(max_length=10, default='open')
ordered_by = models.CharField(max_length=50, null=True)
#user input
name = models.CharField(max_length=50)
email = models.EmailField()
phone = models.CharField(max_length=50)
shipping_info = models.CharField(max_length=50, null=True)
billing_info = models.CharField(max_length=50, null=True)
notes = models.CharField(max_length=150)
total = models.DecimalField(default=0, max_digits=5, decimal_places=2)
surcharge = models.DecimalField(default=0, max_digits=5,decimal_places=2)
def __str__(self):
return self.name
Как использовать это представление/url? Что вы передаете в ПОСТ? – AKS
Это то, что нужно сделать? В учебниках, которые я видел и читал, они просто просто настроили updateview, добавили некоторые строки в urls.py и взаимодействовали с браузером (вручную введите/cancel/id). Я уверен, что есть более практичные способы сделать это, но я новичок в Django. Что ты предлагаешь? – Codarus
Какие учебники вы прочитали? Не могли бы вы предоставить ссылку? – AKS