Django AttributeError 'ModelFormOptions' 对象没有属性 'concrete_fields'
Django AttributeError 'ModelFormOptions' object has no attribute 'concrete_fields'
我收到一个 AttributeError 说 'ModelFormOptions' object has no attribute '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')
在这里,当我 post 无效表单时,我得到
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)
您传递的是表单实例而不是模型实例 (OrderReceiving
),这是 OrderReceivingForm
所期望的。你应该这样做
order = OrderReceiving.objects.get(...)
form = OrderReceivingForm(instance=order)
或者完全删除实例参数,只使用这个
form = OrderReceivingForm()
这一行:
form = OrderReceivingForm(instance=receive_form)
没有意义。您不能将表单作为实例传递给表单。 instance 参数指的是模型的一个实例,当您想要更新现有模型实例(而不是创建一个新模型实例)时,您将传递该实例。如果您不更新现有 OrderReceiving
,则根本不要使用 instance
。
我收到一个 AttributeError 说 'ModelFormOptions' object has no attribute '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')
在这里,当我 post 无效表单时,我得到
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)
您传递的是表单实例而不是模型实例 (OrderReceiving
),这是 OrderReceivingForm
所期望的。你应该这样做
order = OrderReceiving.objects.get(...)
form = OrderReceivingForm(instance=order)
或者完全删除实例参数,只使用这个
form = OrderReceivingForm()
这一行:
form = OrderReceivingForm(instance=receive_form)
没有意义。您不能将表单作为实例传递给表单。 instance 参数指的是模型的一个实例,当您想要更新现有模型实例(而不是创建一个新模型实例)时,您将传递该实例。如果您不更新现有 OrderReceiving
,则根本不要使用 instance
。