出于某种原因,我需要在管理员中编辑模块时访问当前对象。我怎么能这样做。
让我们看看例子:
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表单设置初始值。但是我需要知道当前的书,并且它可以获取相关的出版商和作者。如何获取当前的图书对象。
答案 0 :(得分:0)
问题在于如何设置模型。如果Package
有author
和publisher
且图书有Package
s,那么您应该在Book
上设置一个字段,如:
packages = models.ManyToManyField(Package)
不两个ManyToManyField
都指向名为Package
和author
的{{1}}。首先,我甚至不确定你是如何让这个代码首先运行的,因为Django会尝试为关系创建两个同名的连接表(Book-> Package,实际的属性名称无关紧要)在这种情况下)。