2017-08-24 21 views
2

私はPython djangoフレームワークを使用した単純なアプリケーションを開発していますが、UpdateViewを使用してテンプレートを実行しようとするとクラスベースのビューを使用しています。'QuerySet'オブジェクトに '_meta'属性がありません

'QuerySet' object has no attribute '_meta' 

これが私の見解コード

class DSTVSystemUpdateStaff(LoginRequiredMixin, UpdateView): 
    template_name = 'app/update_staff.html' 
    form_class = DSTVSystemUpdateStaffForm 
    model = Staff 

    def get_object(self, queryset=None): 
     obj = Staff.objects.filter(pk=self.kwargs['staff_id']) 
     return obj 

    def post(self, request, *args, **kwargs): 
     form = self.form_class(request.POST or None, 
           instance=self.get_object()) 
     if form.is_valid(): 
      obj = form.save(commit=False) 
      obj.save() 
      messages.success(self.request, "Staff has been updated") 
      return self.get_success_url() 
     else: 
      messages.error(self.request, "Staff not updated") 
      return HttpResponseRedirect(reverse('dstv_update_staff')) 

    def get_success_url(self): 
     return HttpResponseRedirect(reverse('dstv_manage_staffs')) 

    def get_context_data(self, **kwargs): 
     context = super(DSTVSystemUpdateStaff,   
         self).get_context_data() 
     context['messages'] = messages.get_messages(self.request) 
     context['form'] = self.form_class(self.request.POST or None, 
              instance=self.get_object()) 
     return context 

であり、これは私のフォームコードです:このしてください助けを解決するためのアイデアを持っ

class DSTVSystemUpdateStaffForm(ModelForm): 

class Meta: 
    model = Staff 
    exclude = (
     'profile_picture', 'start_work', 'last_login', 'groups', 
     'user_permissions', 'is_active', 'is_superuser', 
     'date_joined', 'end_work', 'can_sell_out_of_assigned_area', 
     'is_staff') 

    def __init__(self, *args, **kwargs): 
     super(DSTVSystemUpdateStaffForm, self).__init__(*args, 
                **kwargs) 
     for field_name, field in self.fields.items(): 
      field.widget.attrs['class'] = 'form-control' 

は誰でも。

+0

コードを最初に再フォーマットしてください。インデントが正しくないため、コードを読みにくいです。 –

+0

@MenglongLiどうすればいいですか –

+0

@JosephDaudiトレースバックはありませんか? – Goyo

答えて

2

get_object方法は、あなたがfilter()first()を使用することができますinstance取得.TO代わりinstanceの、レコードのquerysetすなわちリストを返します。これは最初に発生します。

def get_object(self, queryset=None): 
    obj = Staff.objects.filter(pk=self.kwargs['staff_id']).first() 
    return obj 
+0

あなたは私の日を救った@Rajezさん​​、ありがとうございました –

+0

ありがとう、その最初の()でした! –

関連する問題