-1

何らかの理由で、管理者でモジュールを編集しているときに現在のオブジェクトにアクセスする必要があります。どうすればそうできますか。

例を見てみましょう:

class Book(models.Model):
    title = models.CharField(max_length=250)
    ISBN = models.CharField(max_length=20)
    author = models.ManyToManyField(Author)
    publisher = models.ManyToManyField(Publisher)

管理フォームには、著者と発行者のオートコンプリート フィールドがあります。そのために、カスタム ウィジェットを作成しました。私の管理フォームは次のようになります。

class BookForm(forms.ModelForm):
    author = forms.CharField(required=False, widget=AutoCompleteWidget('author'), help_text="Please type author name")
    publisher = forms.CharField(required=False, widget=AutoCompleteWidget('publisher'), help_text="Please type publisher name")

    def __init__(self, *args, **kwargs):
        kwargs['initial'] = {'publihser': {author_list}, 'author' : {publisher_list}}

    class Meta:
        model = Book

ご覧のとおり、フォームは完全に異なるため、デフォルトの動作が変更されます。管理者から本を編集しているときに、関連付けられているすべての出版社と著者を author_list と publisher_list に取得したいと考えています。管理フォームで初期値を設定できます。しかし、私は現在の本を知る必要があり、関連する出版社と著者を取得するための ID です。現在の本オブジェクトを取得する方法。

4

1 に答える 1

0

問題は、モデルの設定方法にあります。Packages にauthorandpublisherがあり、本にs がある場合は、次のようなPackageフィールドを設定するだけです。Book

packages = models.ManyToManyField(Package)

namedとManyToManyFieldの両方を指す2 つの s はありません。1 つは、Django がリレーションシップ (Book->Package、実際の属性名は関係ありません) のために同じ名前の 2 つの結合テーブルを作成しようとするため、最初にこのコードを実行する方法がわかりません。このコンテキスト)。Packageauthorpublisher

于 2012-09-19T15:59:27.983 に答える