我有一个ManyToMany关系:
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呢?
答案 0 :(得分:2)
要显示ISBN,您可以创建如下自定义字段:
class BooksField(forms.ModelMultipleChoiceField):
def label_from_instance(self, obj):
return obj.isbn
ManyToManyField有一个CheckboxSelectMultiple但它在管理员上没有正确显示,所以你也可以写一些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
答案 1 :(得分:1)
For 2),在AuthorAdmin类中使用它:
raw_id_fields = ['books']
点击此处:http://docs.djangoproject.com/en/dev/ref/contrib/admin/#ref-contrib-admin了解有关创建自定义ModelAdmin类的说明。我自己为我自己的Django项目考虑了很多,我认为1)需要修改管理模板来查看Author对象。