2017-08-24 122 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方法返回的记录queryset即列表,而不是instance。要获得instance你可以filter()使用first()。这会给你第一次出现。

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

谢谢男人@Rajez,你救了我的日子 –

+0

谢谢,那第一次()做到了! –

相关问题