2010-03-12 17 views
0

好了,我是相当新的Django的,但都被同时读取在线Django的书和djangoproject文件,但我似乎无法弄清楚这个错误了:的ModelForm“对象不是可调用的”错误

我有一个 '订单' 模式:

class Orders(models.Model): 
    client_id = models.ForeignKey(Client) 
    order_date = models.DateField(auto_now_add = True) 
    due_date = models.DateField() 
    completion_date = models.DateField(blank=True, null=True) 
    rush_order = models.BooleanField(default=False) 
    billing_option = models.ForeignKey(Billing) 
    patient_first_name = models.CharField(max_length=30) 
    patient_middle_name = models.CharField(max_length=30, blank=True) 
    patient_last_name = models.CharField(max_length=30) 
    client_patient_id = models.CharField(max_length=30, blank=True) 
    emodel_patient_id = models.CharField(max_length=30) 
    special_instructions = models.TextField(blank=True) 
    order_items = models.ManyToManyField(Order_Items) 

    def __unicode__(self): 
     return '%s : %s %s O: %s F: %s' % (self.client_id, self.patient_first_name, self.patient_last_name, self.order_date, self.completion_date) 

    class Meta: 
     ordering = ['client_id'] 

我有一个 'SearchOrderForm' 的ModelForm:


class SearchOrderForm(ModelForm): 
    class Meta: 
     model = Orders 
     exclude = ('rush_order', 'billing_option', 'client_patient_id', 'special_instructions', 'order_items',) 

和我有一个 'ORDER_STATUS' 功能:

def order_status(request): 
    error = False 
    error_searching = False 
    if request.method == 'POST': 
      OrderFormSet = SearchOrderForm() 
      formset = OrderFormSet() 
      if formset.is_valid(): 
       cd = formset.cleaned_data() 
       emodels_results = cd() 
       emodels_results = cd(queryset = Order.objects.filter(Q(patient_first_name=search)|Q(patient_last_name=search)|Q(client_id=search))) 
       patient_first_name = request.POST('patient_first_name', None) 
       if patient_first_name: 
        emodels_results = emodels_results(queryset = Order.objects.filter(patient_first_name=patient_first_name)) 

       patient_last_name = request.POST('patient_last_name', None) 
       if patient_last_name: 
        emodels_results = emodels_results(queryset = Order.objects.filter(patient_last_name=patient_last_name)) 

       client_id = request.POST('client_id', None) 
       if client_id: 
        emodels_results = emodels_results(queryset = Order.objects.filter(client_id=client_id)) 

       return render_to_response('search_results.html', {'models': emodels_results}) 
      else: 
       emodels_results = "Still messed up!" 
       return render_to_response('search_results.html', {'models': emodels_results}) 
     else: 
      error_searching = True 
      form = SearchOrderForm() 
      return render_to_response('order_status.html', {'form': form, 'error': error, 'error_searching': error_searching}) 

我可以填写自己的状态没有问题,但是当我提交表单我得到以下错误信息: 回溯: 文件“C:\ Python26 \ LIB \站点包\ Django的\核心\ handlers \ base.py“in response_status 105. formset = OrderFormSet()

异常类型:TypeError at/accounts/profile/orderstatus/ 异常值:'SearchOrderForm'对象不可调用

有没有人知道我在做我的SearchOrderForm错误,导致Django说它不可调用?

回答

1

我想你想任一:

OrderFormSet = SearchOrderForm() 
if OrderFormSet.is_valid(): 

formset = SearchOrderForm() 
if formset.is_valid() 

随着第二种方式是首选的语法风格。作为吹毛求疵的问题,Django还提供了一个表单集中型比表单类型不同所以它是惯例指形式的实例作为“形式”:

form = SearchOrderForm() 
if form.is_valid(): 

你将会有一些其他的问题,你的代码:

def order_status(request): 
    error = False 
    error_searching = False 
    if request.method == 'POST': 
      #instead of: 
      #OrderFormSet = SearchOrderForm() 
      #formset = OrderFormSet() 

      #instantiate an instance of your ModelForm 
      #(I'd normally name it "form") 
      formset = SearchOrderForm() 


      if formset.is_valid(): 
       cd = formset.cleaned_data() 
       #cd is now a Python dictionary 
       #these next 2 lines don't make sense, what is your intention? 
       emodels_results = cd() 
       emodels_results = cd(queryset = Order.objects.filter(Q(patient_first_name=search)|Q(patient_last_name=search)|Q(client_id=search))) 
       #you've already used your form to process and clean 
       #the incoming POST data. use the cleaned data instead 
       #patient_first_name = request.POST('patient_first_name', None) 
       patient_first_name = cd.get('patient_first_name','') 

       #use data from the form's cleaned_data as in the line above 
       #I'm not sure what your intention is with how the emodels_results 
       #is but you'll need to rework that for it all to work 

       if patient_first_name: 
        emodels_results = emodels_results(queryset = Order.objects.filter(patient_first_name=patient_first_name)) 

       patient_last_name = request.POST('patient_last_name', None) 
       if patient_last_name: 
        emodels_results = emodels_results(queryset = Order.objects.filter(patient_last_name=patient_last_name)) 

       client_id = request.POST('client_id', None) 
       if client_id: 
        emodels_results = emodels_results(queryset = Order.objects.filter(client_id=client_id)) 

       return render_to_response('search_results.html', {'models': emodels_results}) 
      else: 
       emodels_results = "Still messed up!" 
       return render_to_response('search_results.html', {'models': emodels_results}) 
     else: 
      error_searching = True 
      form = SearchOrderForm() 
      return render_to_response('order_status.html', {'form': form, 'error': error, 'error_searching': error_searching}) 
相关问题