2

django 管理者の変更リストで、list_editable を使用して、ManyToManyField の django-autocomplete ウィジェットを表示したいと考えています。

ここで似たようなものを見つけました: list_editable と widgets

通常、list_display に ManyToManyField を含めると、ImproperlyConfigured 例外が発生します。例:

""'BookAdmin.list_display[2]'、'author' は、サポートされていない ManyToManyField です。"

例外を回避するために、contrib/admin/validate.py から 3 行削除しました (おそらく賢明ではありません)。:)

私は今、次のように吐き出しています。これは近い(?)ですが、葉巻はありません。

<0x1032a85d0 の django.db.models.fields.related.ManyRelatedManager オブジェクト>

続行する方法について何か考えはありますか?これを行うより良い方法はありますか?

現時点で私が持っているものは次のとおりです: (AuthorAutocomplete は通常の管理フォームで正常に動作しています)

class AuthorAutocomplete(AutocompleteSettings):
    search_fields = ('first_name', 'last_name')

class BookAdmin(AutocompleteAdmin, admin.ModelAdmin):
    def get_changelist_form(self, request, **kwargs):
      kwargs.setdefault('form', AuthorAutocompleteForm)
      return super(BookAdmin, self).get_changelist_form(request, **kwargs)    
      list_display = ['isbn', 'title', 'author', 'publisher']
      #...

class AuthorAutocompleteForm(forms.ModelForm):
    class Meta:
        model  = Book
    author = AuthorAutocomplete

ありがとう!

4

2 に答える 2

7

これは古いトピックですが、これが他の人の助けになることを願っています。

ManyToMany フィールドの値を取得してその値を表示するには、次のようにします。例として list_display を使用しています。

class TestAdmin(admin.ModelAdmin):
    def get_some_value(self):
        return ", " . join([x.__str__() for x in self.manytomany_field.all()])

    list_display(get_some_value)
    get_some_value.short_description = 'Title' #sets column header to Title
于 2012-07-04T03:06:36.880 に答える
0

愚かな私。William の manytomany_field は組み込みの ModelAdmin オブジェクトだと思いました。だから私は彼のコードをそのまま実行しました(参加後に欠けている括弧を入れた後)。

奇妙なことに、エラーメッセージを生成せずに実行されました。しかし、値を取得するはずだったときに (None) が表示されました。そして、「django model.Admin.manytomany_field」でググっても何も見つからないのはおかしいと思いました。ハッ!

そのため、最終的に、manytomany_field の代わりに多対多フィールドの NAME を配置する必要があることに気付きました。できます!

于 2013-03-04T01:03:49.347 に答える