-1

出于某种原因,我需要在管理员中编辑模块时访问当前对象。我怎么能这样做。

让我们看一个例子:

class Book(models.Model):
    title = models.CharField(max_length=250)
    ISBN = models.CharField(max_length=20)
    author = models.ManyToManyField(Author)
    publisher = models.ManyToManyField(Publisher)

在管理表单中,我有作者和出版商的自动完成字段。为此,我构建了自定义小部件。我的管理表单如下所示:

class BookForm(forms.ModelForm):
    author = forms.CharField(required=False, widget=AutoCompleteWidget('author'), help_text="Please type author name")
    publisher = forms.CharField(required=False, widget=AutoCompleteWidget('publisher'), help_text="Please type publisher name")

    def __init__(self, *args, **kwargs):
        kwargs['initial'] = {'publihser': {author_list}, 'author' : {publisher_list}}

    class Meta:
        model = Book

如您所见,表单完全不同,因此默认行为将被更改。从管理员编辑书籍时,我想为 author_list 和 publisher_list 获取所有相关的出版商和作者。我可以在管理员表单中设置初始值。但我需要知道当前的书和获取相关出版商和作者的 ID。如何获取当前图书对象。

4

1 回答 1

0

问题在于您如何设置模型。如果Packages 有一个authorandpublisher并且一本书有Packages,那么你应该简单地在Booklike 上有一个字段:

packages = models.ManyToManyField(Package)

不是两个ManyToManyFields 都指向Packagenamedauthorpublisher。一方面,我什至不确定你是如何让这段代码首先运行的,因为 Django 会尝试为关系创建两个同名的连接表(Book->Package,实际的属性名称在这个上下文)。

于 2012-09-19T15:59:27.983 回答