2

既存のモデル (Book) へのインスタンスを持つ modelForm を作成します。Books レコードを更新できません。新しいレコードの追加は問題ありませんが、更新しようとすると、発行元 (外部キー) が見つからないようです。エラーは「指定されたクエリに一致する発行者はありません」です。

models.py

クラス パブリッシャー (models.Model):

name = models.CharField(max_length=30)

address = models.CharField(max_length=50)

city = models.CharField(max_length=60)

state_province = models.CharField(max_length=30)

country = models.CharField(max_length=50)

website = models.URLField()

def __unicode__(self):
    return self.name

class Meta:

    ordering = ["name"]

クラスの作成者 (models.Model):

first_name = models.CharField(max_length=30)

last_name = models.CharField(max_length=40)

email = models.EmailField(blank=True, verbose_name='e-mail')

objects = models.Manager()

sel_objects=AuthorManager()

def __unicode__(self):

return self.first_name+' '+ self.last_name

クラス Book(models.Model):

title = models.CharField(max_length=100)

authors = models.ManyToManyField(Author)

publisher = models.ForeignKey(Publisher)

publication_date = models.DateField(blank=True, null=True)

num_pages = models.IntegerField(blank=True, null=True)

クラス BookForm(ModelForm):

class Meta:

    model = Book

ビュー.py

def authorcontactupd(リクエスト、id):

if request.method == 'POST':

    a=Author.objects.get(pk=int(id))

    form = AuthorForm(request.POST, instance=a)

    if form.is_valid():

        form.save()

        return HttpResponseRedirect('/contact/created')

else:

    a=Author.objects.get(pk=int(id))

    form = AuthorForm(instance=a)

return render_to_response('author_form.html', {'form': form})

エラーメッセージ

ページが見つかりません (404) リクエスト方法: POST リクエスト URL: http://127.0.0.1:8000/books/bookupd/

指定されたクエリに一致するパブリッシャーはありません。

Django 設定ファイルに DEBUG = True があるため、このエラーが表示されます。これを False に変更すると、Django は標準の 404 ページを表示します。

urls.py

django.conf.urls.defaultsインポートから *

django.views.generic.simple import direct_to_template から

mysite10.books.views からインポート about_pages、books_by_publisher、authorcontact、bookcontact、booklisting、authorcontactupd

django.views.generic import list_detail から

from mysite10.books.models import Publisher, Book

django.contribインポート管理者から

admin.autodiscover()

デフォルト get_books():

return Book.objects.all()

出版社情報 = {

'queryset': Publisher.objects.all(),

'template_name':'books/publisher_publisher_list_page.html',

'template_object_name': 'publisher',

'extra_context': {'book_list': Book.objects.all},

}

書籍情報 = {

'queryset': Book.objects.order_by('-publication_date'),

'template_name':'books/publisher_publisher_list_page.html',

'template_object_name': 'book',

'extra_context': {'publisher_list': Publisher.objects.all},

}

oreilly_books = {

'queryset': Book.objects.filter(publisher__name="O'Reilly"),

'template_name':'books/publisher_publisher_list_page.html',

'template_object_name': 'book',

'extra_context': {'publisher_list': Publisher.objects.all},

}

urlpatterns = パターン('',

(r'^admin/(.*)', admin.site.root),

(r'^polls/', include('mysite10.polls.urls')),

(r'^search-form/$', 'mysite10.views.search_form'),

(r'^search/$', 'mysite10.views.search'),

(r'^contact/$', 'mysite10.contact.views.contact'),

(r'^contact/thanks2/(\d+)$', 'mysite10.contact.views.thanks2'),

(r'^contact/thanks/$', 'mysite10.contact.views.thanks'),

(r'^publishers/$', list_detail.object_list, publisher_info),

(r'^books/$', list_detail.object_list, book_info),

(r'^books/oreilly/$', list_detail.object_list, oreilly_books),

(r'^books/(\w+)/$', books_by_publisher),

(r'^author/$', authorcontact),

(r'^authorupd/(\d+)/$', authorcontactupd),

(r'^contact/created/$', 'mysite10.books.views.created'),

(r'^bookform/$', bookcontact),

(r'^contact/bookscreated/$', 'mysite10.books.views.books_created'),

(r'^booklist/$', 'mysite10.books.views.booklisting'),

(r'^books/bookupd/(\d+)$', 'mysite10.books.views.book_upd'),

)

--------------------------------------------------

最終的に以下のコードで動作するようになりました。$ の前にスラッシュがないため、urls.py でエラーが発生しました。(r'^books/bookupd/(\d+)/$' に修正

ビュー.py

def book_upd(リクエスト、ID):

if request.method == 'POST':

    a=Book.objects.get(pk=int(id))

    form = BookForm(request.POST, instance=a)

    if form.is_valid():

        form.save()

        return HttpResponseRedirect('/contact/bookscreated')
else:

    a=Book.objects.get(pk=int(id))

    form = BookForm(instance=a)

return render_to_response('book_form.html', {'form': form})

urls.py

(r'^books/bookupd/(\d+)/$', 'mysite10.books.views.book_upd'),

4

1 に答える 1

0

urls.py にあるような情報が不足しています。投稿もできますか?レコードが実際に更新されていないことをデータベースで確認しましたか? (エラーは、リダイレクトの処理の結果である可能性があります)


あなたの編集は不十分です: - データベースをチェックして、レコードが更新されているかどうかを確認しましたか? - urls.py 全体を貼り付けてください。たとえば、成功した場合に /contact/created が何にマップされているか、または一部の publisher.get() メソッドが含まれているかどうかを確認するのは興味深いことです。

さらに、トレースバックは、問題の原因に関する多くの有用な情報を提供することもできます。


エラーが発生しても、オブジェクトがデータベースで更新されているかどうかを確認しましたか?

「oreilly_books」セクション (または少なくともクエリセット部分) を削除して、それなしで同じことを試してみることはできますか?

于 2009-03-19T09:53:41.440 に答える