3

私は多対多の関係を持っています:

クラスの本:
  タイトル=models.CharField(...)
  isbn = models.CharField(...)

  def unicode(self):
    self.titleを返す

  def ISBN(self):
    self.isbnを返します

クラス作成者:
  名前=models.CharField(...)
  Books = models.ManyToManyField(Book ...)

著者の管理インターフェースで、本のUnicode表示を使用する複数選択リストが表示されます。リストを2つの方法で変更したい:

1)管理インターフェースのみISBN番号を表示したい、それ以外の場所では、タイトルを表示したい「Book」オブジェクトを印刷するだけです。

2)多対多に対してMultipleSelectListよりも優れたウィジェットを使用するにはどうすればよいですか。代わりにCheckBoxSelectListを使用するように指定するにはどうすればよいですか?

4

2 に答える 2

3

ISBNを表示するには、次のようなカスタムフィールドを作成できます。


class BooksField(forms.ModelMultipleChoiceField):
    def label_from_instance(self, obj):
        return obj.isbn

ManyToManyFieldにはCheckboxSelectMultipleがありますが、管理者には正しく表示されないため、cssを記述して修正することもできます。

モデルのフォームを作成し、それを管理者クラスで使用する必要があります。


class AuthorForm(forms.ModelForm):
    books = BooksField(Book.objects.all(), widget=forms.CheckboxSelectMultiple)

    class Meta:
        model = Author

    class Media:
        css = {
            'all': ('booksfield.css',)
        }

class AuthorAdmin(admin.ModelAdmin):
    form = AuthorForm
于 2009-09-18T23:58:21.103 に答える
2

2)の場合、AuthorAdminクラスでこれを使用します。

raw_id_fields = ['books']

カスタムModelAdminクラスを作成する手順については、http://docs.djangoproject.com/en/dev/ref/contrib/admin/#ref-contrib-adminを確認してください。私は自分のDjangoプロジェクトでこれについてよく考えましたが、1)Authorオブジェクトを表示するための管理テンプレートを変更する必要があると思います。

于 2009-09-18T16:12:50.543 に答える