私は、顧客から受け取ったさまざまな注文を保持するモデル(注文)を持っているDjangoプロジェクトに取り組んでいます。 UpdateView(CancelOrder)を使用して、Orderフィールド(ステータス)の1つをID経由で更新しようとしています。私はUpdateViewを書いてurls.pyを修正しましたが、urlを使って注文のステータスを更新しようとするとエラーが表示されます:複数の注文が保存されているにもかかわらず、私の質問は、なぜUpdateViewは私のモデルデータを見ていないのですか?私は何かを逃したか?私のモデルデータ(特にid/pk)が私のDjango UpdateViewに表示されないのはなぜですか?
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を使用していますか?あなたは何をPOSTで渡していますか? – AKS
それは何をする必要がありますか?私が見たチュートリアルでは、単にupdateviewを設定し、urls.pyにいくつかの行を追加し、ブラウザと対話していました(手動で/ cancel/idをタイプする)。これを行うもっと実用的な方法があると確信していますが、私はDjangoを初めて使っています。何をお勧めしますか? – Codarus
あなたはどのチュートリアルを読みましたか?あなたはリンクを提供できますか? – AKS