2015-06-12 125 views
0

我得到一個AttributeError,表示'ModelFormOptions' object has no attribute 'concrete_fields'。我的代碼如下:Django AttributeError'ModelFormOptions'對象沒有屬性'concrete_fields'

我的模式是這樣的:

class OrderReceiving(models.Model): 
    user = models.ForeignKey(User) 
    po = models.ForeignKey(Order) 
    datetime = models.DateTimeField(default=timezone.now) 
    product = models.ForeignKey(Product) 
    quantity = models.IntegerField(default=0) 
    building = models.ForeignKey(BuildingNumber) 
    isele_abc = models.ForeignKey(IseleAbc) 
    isele_num = models.ForeignKey(IseleNum) 
    isele_floor = models.ForeignKey(IseleFloor) 

我的ModelForm是這樣的:

class OrderReceivingForm(ModelForm): 

    class Meta: 
     model = OrderReceiving 
     exclude = ['user', 'datetime'] 
     labels = { 
      'po': _('Vendor PO ID'), 
     } 

,我的看法是:

class OrderReceivingView(View): 
    template = 'poreceiving/po_receive.html' 

    def get(self, request, *args, **kwargs): 
     context = {} 
     form = OrderReceivingForm() 
     context['form'] = form 
     return render_to_response(self.template, 
           RequestContext(request, context)) 

    def post(self, request, *args, **kwargs): 
     receive_form = OrderReceivingForm(request.POST) 
     if receive_form.is_valid(): 
      receive_form.save() 
     else: 
      context = {} 
      form = OrderReceivingForm(instance=receive_form) 
      context['form'] = form 
      return render_to_response(self.template, 
            RequestContext(request, context)) 
     return HttpResponse('Hi everyone') 

這裏的時候,我張貼無效表格,然後我得到

AttributeError 'ModelFormOptions' object has no attribute 'concrete_fields'. 

我希望獲得帶有錯誤信息的表單。 請幫我一把。

我回溯:

Traceback: 
File "/home/student/virtualenvs/alex/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
132.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "/home/student/virtualenvs/alex/lib/python2.7/site-packages/django/views/generic/base.py" in view 
71.    return self.dispatch(request, *args, **kwargs) 
File "/home/student/virtualenvs/alex/lib/python2.7/site-packages/django/views/generic/base.py" in dispatch 
89.   return handler(request, *args, **kwargs) 
File "/home/student/git/ezoffer-pos2/poreceiving/views.py" in post 
42.    form = OrderReceivingForm(instance=receive_form) 
File "/home/student/virtualenvs/alex/lib/python2.7/site-packages/django/forms/models.py" in __init__ 
320.    object_data = model_to_dict(instance, opts.fields, opts.exclude) 
File "/home/student/virtualenvs/alex/lib/python2.7/site-packages/django/forms/models.py" in model_to_dict 
132.  for f in chain(opts.concrete_fields, opts.virtual_fields, opts.many_to_many): 

Exception Type: AttributeError at /po/receiving/ 
Exception Value: 'ModelFormOptions' object has no attribute 'concrete_fields' 
+1

請顯示完整的回溯。 –

+0

@daniel我已經用traceback更新了我的帖子 – wrufesh

回答

2

這條線:

form = OrderReceivingForm(instance=receive_form) 

是沒有意義的。您無法將表單作爲實例傳遞給表單。實例參數指的是模型的一個實例,當您想要更新現有模型實例(而不是創建新實例)時通過該實例。如果您未更新現有的OrderReceiving,則根本不要使用instance

0

你的問題是在這條線

form = OrderReceivingForm(instance=receive_form) 

你傳遞一個形式實例,而不是一個模型實例(OrderReceiving),這是什麼OrderReceivingForm期待。你應該做這樣的事情,而不是

order = OrderReceiving.objects.get(...) 
form = OrderReceivingForm(instance=order) 

或完全消除實例參數,只是有這個

form = OrderReceivingForm() 
相關問題