Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 由于外键原因,表单“”无效()_Python_Forms_Mongodb_Validation_Django Nonrel - Fatal编程技术网

Python 由于外键原因,表单“”无效()

Python 由于外键原因,表单“”无效(),python,forms,mongodb,validation,django-nonrel,Python,Forms,Mongodb,Validation,Django Nonrel,我不明白为什么我的表格现在无效。每次我提交我的表格,如果它是无效的,我只是让网站重新加载。我认为我提交的是正确的,我尝试了几种不同的方法来让它工作,但我现在束手无策。我很确定错误在我用来引用我的用户对象的错误键中(我想注册一个设备并将它注册到一个登录的用户) views.py: def devices(request): if request.method == 'POST': devform = DeviceForm(request.POST, owner=reques

我不明白为什么我的表格现在无效。每次我提交我的表格,如果它是无效的,我只是让网站重新加载。我认为我提交的是正确的,我尝试了几种不同的方法来让它工作,但我现在束手无策。我很确定错误在我用来引用我的用户对象的错误键中(我想注册一个设备并将它注册到一个登录的用户)

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))
def devices(request):
    dev_obj = DeviceForm()
    if request.method == 'POST':
        u = User.objects.get(username=request.META['USER'])
        devowner = Device(owner=u)
        devform = DeviceForm(request.POST, instance=devowner)
        if devform.is_valid():
            dev = devform.save()
            dev.save()
            return HttpResponseRedirect('deviceconfirmation')
        else:
            return render(request, 'courses/invalidimp.html', {'devform':devform})
    else:
        return render_to_response('courses/devices.html', {'dev_obj': dev_obj}, context_instance=RequestContext(request))
models.py:

class DeviceForm(ModelForm):
    class Meta:
        model = Device
        exclude = ['owner']

    def __init__(self, *args, **kwargs):
        self.owner = kwargs.pop('owner', None)
        super(DeviceForm, self).__init__(*args, **kwargs)
类DeviceForm(模型形式):


旁注:我已经注释掉了clean_agent_id方法,因为当我尝试使用它来防止设备的重复时,我得到了一个“数据库错误不支持此查询”我使用MongoDB作为我的数据库,所以我不需要进行任何迁移或类似的操作

我想我明白了为什么它没有通过。仅仅引用用户名是不够的,所以我要做的是手动添加用户名(我在Django表单网站的ModelForm页面上查看了如何做到这一点)。我要做的是1。从模板中的“我的表单”中删除“所有者”字段。2. '对于DeviceForm模型和3,从my models.py中排除“所有者”字段。使用views.py上当前登录的用户手动设置所有者

devices.html:

{% extends "layout.html" %}
{% load static from staticfiles %}

{% block title %}{{ page.title }}{% endblock %}
{% block content %}
<article>
    <div id="wrapper">
        <p id="devicecreate">Register your device to your account:</p>
        <form action="{% url 'courses:devices' %}" id="devform" method="post"> {% csrf_token %}
            <p>
                <label for="name">Device Name:</label>
                <input id="name" name="name" type="text">
            </p>
            <p>
                <label for="agent_id">Agent ID:</label>
                <input id="agent_id" name="agent_id" type="text">
            </p>
            <p>
                <label for="device_type">Imp Type:</label>
                <input id="device_type" name="device_type" type="text">
            </p>
            <p>
                <input type="submit" value="REGISTER DEVICE" id="submit">
            </p>
        </form>
    </div>
</article>
{% endblock %}
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))
def devices(request):
    dev_obj = DeviceForm()
    if request.method == 'POST':
        u = User.objects.get(username=request.META['USER'])
        devowner = Device(owner=u)
        devform = DeviceForm(request.POST, instance=devowner)
        if devform.is_valid():
            dev = devform.save()
            dev.save()
            return HttpResponseRedirect('deviceconfirmation')
        else:
            return render(request, 'courses/invalidimp.html', {'devform':devform})
    else:
        return render_to_response('courses/devices.html', {'dev_obj': dev_obj}, context_instance=RequestContext(request))

这将使我只通过is_valid()并正确获取所有者模型。我在保存表单时仍有问题,但我认为这充分回答了为什么我的is\u valid()没有通过的问题。

您是否可以在此处提及form.errors您是说form.is\u valid()不是真的,那么一定有form.error show我可以看看form.errors是什么吗?抱歉,对于Django来说有点陌生,在这里使用调试器并停止执行流,导入pdb;pdb.set_trace()我查找并找到了一个显示devform.errors的方法,但我能得到的所有信息都是错误:“选择一个有效的选项。该选项不是可用的选项之一。”