3

django モデル システムとそのデフォルトの管理者で厄介な問題が発生しています。

次のような非常に単純なモデルがあるとします。

class Note(models.Model):
    text = models.CharField(max_length=200)

def __unicode__(self):
    return self.text

そして次のようなコンテナ:

class NoteCollection(models.Model):
    notelist = models.ManyToManyField(Note)
    title = models.CharField(max_length=20)

def __unicode__(self):
    return self.title

NoteCollectionが追加されたときに、すべての「メモ」要素を更新したいのです。m2mモデルには複雑な保存メカニズムがあると読んだので、考えていたのは、フォームオブジェクトを読み込んで、自分でNote要素を保存するだけです!!

しかし、APPNAME/admin.py で次のようなものを作成すると:

from models import Note,NoteCollection
from django.contrib import admin

class NoteCollectionAdmin(admin.ModelAdmin):
    def save_model(self, request, obj, form, change):
        # Something USEFUL HERE
        pass

admin.site.register(Note)
admin.site.register(NoteCollection, NoteCollectionAdmin)

Django からエラーが表示されます: (「NoteCollection」インスタンスは、多対多の関係を使用する前に主キーの値を持つ必要があります。)

私はNoteCollectionオブジェクトをまったく使用したくありません.フォームオブジェクトに興味があります..

M2M フィールドで save_model を使用するいくつかの例をインターネットで見つけたので、なぜこのエラーが発生し続けるのか理解できません。参考までに、スクラッププロジェクトを新しく作成したばかりで、テストにsqlite dbを使用しています

4

1 に答える 1

2

NoteCollectionAdminでsave_model()をオーバーライドすることで、Djangoがノートコレクションを保存できないようにします。すべてを処理した後、Djangoはm2mテーブルを保存しますが、データベースに保存しなかったため、notecollectionに自動IDがないため失敗します。

主な問題は、Djangoがオブジェクトを保存した後にm2mファイルを保存することです。私は数日前にそれと絡みました。http://reinout.vanrees.org/weblog/2011/11/29/many-to-many-field-save-method.htmlを参照してください。

やや関連する質問:保存後すぐに更新されないManyToManyリレーションシップの問題

于 2011-12-09T14:02:23.280 に答える