关于python:在Django Admin中,我想更改外键在多维关系管理窗口小部件中的显示方式

In Django Admin, I want to change how foreign keys are displayed in a Many-Many Relationship admin widget

我有一个ManyToMany关系:

1
2
3
4
5
6
7
8
9
10
11
12
13
class Book:
  title = models.CharField(...)
  isbn = models.CharField(...)

  def unicode(self):
    return self.title

  def ISBN(self):
    return self.isbn

class Author:
  name = models.CharField(...)
  books = models.ManyToManyField(Book...)

在作者的管理界面中,我获得了一个使用书籍的unicode显示的多选列表。 我想以两种方式更改清单:

1)只有管理界面我想显示ISBN号,在其他任何地方我打印出一个"书"对象我想要显示的标题。

2)如何为ManyToMany使用比MultipleSelectList更好的小部件。 我怎么能指定使用CheckBoxSelectList呢?


要显示ISBN,您可以创建一个自定义字段,如下所示:

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

ManyToManyField有一个CheckboxSelectMultiple但它在管理员上没有正确显示,所以你也可以编写一些css来修复它。

您需要为模型创建表单,并在管理类中使用它:

1
2
3
4
5
6
7
8
9
10
11
12
13
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

对于2),在AuthorAdmin类中使用它:

1
raw_id_fields = ['books']

请在此处查看:http://docs.djangoproject.com/en/dev/ref/contrib/admin/#ref-contrib-admin,了解有关创建自定义ModelAdmin类的说明。 我自己为我自己的Django项目考虑了很多,我认为1)需要修改管理模板来查看Author对象。