我有一个多对多关系:
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...)
在 Author 的管理界面中,我得到一个使用 unicode 显示书籍的多选列表。我想通过两种方式更改列表:
1) 仅在管理界面我想显示 ISBN 号,在其他地方我只是打印出一个“书”对象我想显示标题。
2) 对于 ManyToMany,我怎么能使用比 MultipleSelectList 更好的小部件。我如何指定改用 CheckBoxSelectList?
请您参考如下方法:
要显示 ISBN,您可以创建一个自定义字段,如下所示:
class BooksField(forms.ModelMultipleChoiceField):
def label_from_instance(self, obj):
return obj.isbn
有一个 CheckboxSelectMultiple对于 ManyToManyField,但它在管理员上显示不正确,因此您也可以编写一些 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
