我试图将参数传递给表单,在这种情况下是一个object_id。 该表单仅在 change_view 上使用,此代码有效:
我的表格:
class MyForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
self.my_id = kwargs.pop('my_id', None)
super(MyForm, self).__init__(*args, **kwargs)
class Meta:
model = MyModel
fields = ('thing_to_show_a',)
我的管理模式:
class MyModelAdmin(admin.ModelAdmin):
def change_view(self, request, obj_id):
self.form = MyForm
return super(MyModelAdmin, self).change_view(request, obj_id)
...
但是如果我尝试将id作为参数传递给表单:
class MyModelAdmin(admin.ModelAdmin):
def change_view(self, request, obj_id):
self.form = MyForm(my_id=obj_id)
return super(MyModelAdmin, self).change_view(request, obj_id)
...
我明白了:
'MyForm' object has no attribute '__name__'
答案 0 :(得分:0)
在self.form = MyForm
中,您将一个类对象分配给self.form。
在self.form = MyForm(my_id=obj_id)
中,您实例化MyForm类的对象并将其分配给self.form。
Django希望在self.form中找到一个类,而不是实例。