AdminModel 对象没有属性'obj'



我的模型具有ManyTomany字段,在AdminModel类中的管理面板中,我使用此代码:

def get_object(self, request, object_id, to_field):
    # Hook obj for use in formfield_for_manytomany
    self.obj = super(GoalAdmin, self).get_object(request, object_id)
    return self.obj
def formfield_for_manytomany(self, db_field, request, **kwargs):
    if db_field.name == "reviewers":
        kwargs["queryset"] = Goal.objects.get(id=self.obj.id).reviewers.all()
    return super(GoalAdmin, self).formfield_for_manytomany(db_field, request, **kwargs)

它可以正常工作,直到我尝试添加管理面板中的目标。比我收到这个错误:

'GoalAdmin' object has no attribute 'obj'

我该如何修复?

upd:错误发生在这里:

 kwargs["queryset"] = Goal.objects.get(id=self.obj.id).reviewers.all() 
Variable    Value
self       <goals.admin.GoalAdmin object at 0xa7d472cc>
db_field    <django.db.models.fields.related.ManyToManyField: reviewers>
request     <WSGIRequest: GET '/goals/goal/add/'>
kwargs      {}

您的错误大概是因为get_objectformfield_for_manytomany运行的点没有被调用。

可能有解决这个问题的方法,但这确实是错误的方法。应通过定义自定义表单并在管理类中使用该操作来完成此类操作。

class GoalAdminForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(GoalAdminForm, self).__init__(*args, **kwargs)
        if self.instance is not None:
            self.fields["reviewers"].queryset = Goal.objects.get(id=self.instance.id).reviewers.all()
class GoalAdmin(admin.ModelAdmin):
    form = GoalAdminForm

最新更新