【发布时间】:2015-08-10 15:32:25
【问题描述】:
我不明白为什么我的表单现在无效。每次我提交表单时,如果它无效,我只需重新加载网站。我认为我正确地提交了它,并且我尝试了几种不同的方法来使它正常工作,但我现在束手无策。我很确定错误出现在我用来引用我的用户对象的错误键中(我想注册一个设备并将其注册给登录用户)
views.py:
def devices(request):
if request.method == 'POST':
devform = DeviceForm(request.POST, owner=request.user)
if devform.is_valid():
dev = devform.save()
dev.save()
return HttpResponseRedirect(reverse('deviceconfirmation', kwargs={'device_id': dev.id}))
else:
return render_to_response('courses/devices.html', {'devform': devform}, context_instance=RequestContext(request))
else:
devform = DeviceForm()
return render_to_response('courses/devices.html', {'devform': devform}, context_instance=RequestContext(request))
models.py:
类 DeviceForm(ModelForm):
class Meta:
model = Device
fields = ['name', 'agent_id', 'device_type', 'owner']
def __init__(self, *args, **kwargs):
self.owner = kwargs.pop('owner', None)
super(DeviceForm, self).__init__(*args, **kwargs)
"""def clean_agent_id(self):
agent_id = self.cleaned_data['agent_id']
if Device.objects.exclude(pk=self.instance.pk).filter(agent_id=agent_id).exists():
raise forms.ValidationError(u'agent_id "%s" is already in use.' % agent_id)
return agent_id
"""
def save(self, commit=True):
device = super(DeviceForm, self).save(commit=False)
device.owner = self.owner
if commit:
device.save()
return device
旁注:我已将 clean_agent_id 方法注释掉,因为当我尝试使用它来防止设备重复时,我得到“数据库错误不支持此查询”我使用 MongoDB 作为我的数据库,所以我不需要进行任何迁移或类似的事情。
【问题讨论】:
-
您能在此处提及 form.errors
-
你是说form.is_valid()不成立,那肯定有form.errors
-
如何查看 form.errors 是什么?抱歉,这里对 Django 有点陌生
-
使用调试器并停止执行流程,导入pdb; pdb.set_trace()
-
我查看并找到了一种显示 devform.errors 的方法,但我能得到的所有信息都是错误:“选择一个有效的选择。该选择不是可用的选择之一。”跨度>
标签: python forms mongodb validation django-nonrel