2017-02-21 24 views
0

我有多對多場模型,並在我的AdminModel類管理面板我用這個代碼:AdminModel對象有沒有屬性「OBJ」

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  {} 
+0

請顯示完整的回溯。這個錯誤在哪裏發生? –

+0

第一次嘗試保存時發生了什麼? –

+0

已更新。不,當我點擊添加按鈕時,會發生這種錯誤。甚至形式不顯示。 –

回答

2

你的錯誤可能發生,因爲get_object尚未在哪裏formfield_for_manytomany運行的點叫。

可能有方法來解決這個問題,但這確實是錯誤的方法。這種事情應該通過定義一個自定義表單並在admin類中使用。

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 
+0

呃,非常感謝你提出使用自定義表單。現在它像需要的那樣工作。知識庫中增加了1分正確的方法。 –