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对象。