Виджет ManyToManyField в списке изменений администратора django? - PullRequest
2 голосов
/ 03 октября 2011

В списке изменений администратора django я хочу использовать list_editable для отображения виджета django-autocomplete для ManyToManyField.

Я нашел что-то подобное здесь: list_editable и widgets

Обычно включение ManyToManyField в list_display вызывает исключение ImproperlyConfigured, например:

"" 'BookAdmin.list_display [2]', 'author' - это ManyToManyField, который не поддерживается. "

Я (возможно, неразумно) удалил 3 строки из contrib / admin / validate.py, чтобы обойти исключение. :)

У меня теперь есть выплевывание следующего, что близко (?), Но без сигары.

Есть мысли о том, как поступить? Есть ли лучший способ сделать это?

Вот что у меня есть на данный момент: (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

Спасибо!

Ответы [ 2 ]

6 голосов
/ 04 июля 2012

Это старая тема, но я надеюсь, что это может помочь кому-то еще.

Чтобы получить значения для поля 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
0 голосов
/ 04 марта 2013

Глупый я. Я думал, что manytomany_field Уильяма - это встроенный объект ModelAdmin. Поэтому я запустил его код как есть (вставив пропущенные скобки после объединения).

Странно сказать, он работал без сообщения об ошибке. Но (нет) появилось, когда я должен был получить значения. И мне показалось странным, что я ничего не смог найти, когда гуглил «django model.Admin.manytomany_field». Хах!

Итак, в конце концов я понял, что должен поставить ИМЯ поля многие-ко-многим вместо поля много-много-много. Это работает!

...