django管理员网站编辑

时间:2012-09-19 15:35:34

标签: django django-forms django-admin

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

让我们看看例子:

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

如您所见,表单完全不同,因此默认行为将会更改。在从admin编辑书籍时,我想获得author_list和publisher_list的所有相关发布者和作者。我可以用admin表单设置初始值。但是我需要知道当前的书,并且它可以获取相关的出版商和作者。如何获取当前的图书对象。

1 个答案:

答案 0 :(得分:0)

问题在于如何设置模型。如果Packageauthorpublisher且图书有Package s,那么您应该在Book上设置一个字段,如:

packages = models.ManyToManyField(Package)

两个ManyToManyField都指向名为Packageauthor的{​​{1}}。首先,我甚至不确定你是如何让这个代码首先运行的,因为Django会尝试为关系创建两个同名的连接表(Book-> Package,实际的属性名称无关紧要)在这种情况下)。