Skip to main content
 首页 » 编程设计

python之Django AttributeError 'ModelFormOptions' 对象没有属性 'concrete_fields'

2025年05月04日23wuhuacong

我得到一个 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' 

请您参考如下方法:

这一行:

form = OrderReceivingForm(instance=receive_form) 

没有意义。您不能将表单作为实例传递给表单。 instance 参数指的是模型的一个实例,当您想要更新现有模型实例(而不是创建一个新模型实例)时,您将传递该实例。如果您不更新现有的 OrderReceiving,则根本不要使用 instance。