3

我有一个多对多关系:

课本:
  标题 = 模型.CharField(...)
  isbn = models.CharField(...)

  def unicode(自我):
    返回self.title

  定义 ISBN(自己):
    返回 self.isbn

班级作者:
  名称 = 模型.CharField(...)
  书籍=模型。ManyToManyField(书籍...)

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

1)仅对于我想显示 ISBN 号的管理界面,在其他任何地方我只打印一个我想要显示标题的“Book”对象。

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

4

2 回答 2

3

要显示 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
于 2009-09-18T23:58:21.103 回答
2

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

raw_id_fields = ['books']

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

于 2009-09-18T16:12:50.543 回答