Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.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
为什么我能';当我在Django中将'LoginRequiredMixin'传递给我的'view'时,是否不将我的表单提交到数据库?_Django_Django Forms - Fatal编程技术网

为什么我能';当我在Django中将'LoginRequiredMixin'传递给我的'view'时,是否不将我的表单提交到数据库?

为什么我能';当我在Django中将'LoginRequiredMixin'传递给我的'view'时,是否不将我的表单提交到数据库?,django,django-forms,Django,Django Forms,我是Django的新手,我正在尝试制作一个非常简单的应用程序,让我的同事在客户机上提交任务,以及完成任务所花的时间 我可以通过管理员页面提交到我的模型,但是我不能通过HTML页面将其作为表单提交 我使用的是django autocomplete灯,它也工作得很好 #这是我的forms.py文件 类PushTask(模型形式): name=CharField() 类元(对象): “”“元数据的文档字符串。”“” model=ClientModel 字段=['name','reason','time

我是Django的新手,我正在尝试制作一个非常简单的应用程序,让我的同事在客户机上提交任务,以及完成任务所花的时间

我可以通过管理员页面提交到我的模型,但是我不能通过HTML页面将其作为表单提交

我使用的是
django autocomplete灯
,它也工作得很好

#这是我的forms.py文件
类PushTask(模型形式):
name=CharField()
类元(对象):
“”“元数据的文档字符串。”“”
model=ClientModel
字段=['name','reason','time_-spend']
小部件={
“名称”:autocomplete.ModelSelect2(url='name-autocomplete'),
}
#这是我的models.py文件的一部分
类ClientModel(models.Model):
Aa=models.AutoField(主键=True,唯一键=True)
name=models.ForeignKey(客户,on_delete=models.CASCADE)
花费的时间=models.TimeField(默认值=无)
dec_name=models.CharField(最大长度=100,默认值=None)
原因=models.ForeignKey(任务,on_delete=models.CASCADE)
date\u added=models.DateTimeField(自动\u now=True)
定义(自我):
返回self.name.name
#这是我的views.py,我认为是它引起了问题
类记录视图(LoginRequiredMixin,视图):
template_name='manage_records.html'
def get(自我,请求):
打印('我得到了表格')
formset=PushTask()
返回呈现(请求,self.template_名称,{'formset':formset})
def post(自我,请求):
打印('我已发布')
formset=PushTask(request.POST)
如果formset.is_有效():
ClientModel(名称=名称,原因=原因,花费的时间=花费的时间,
dec_name=request.user)
formset.save()
formset=PushTask()
返回HttpResponseRedirect('manage_records.html')
args={'formset':formset}
返回呈现(请求,self.template_名称,{'formset':formset})

{%csrf_令牌%}
{{formset.as_table}}

期望的结果是,当用户提交表单时,将所有内容保存到我的数据库中,并清理表单以供用户重用。

您可以使用以下内容构建一个
ClientModel

ClientModel(name=name, reason=reason, time_spent=time_spent, 
            dec_name=request.user)
但是这没有任何意义,因为您的
模型表单
应该这样做,并且因为
原因
花费的时间等都没有定义

此外,您似乎重定向到模板名称,而不是视图的名称(或视图的路径)

上面看起来很像一个,因此我强烈建议使用这样的视图,并改变您想要改变的行为:

from django.urls import reverse_lazy
from django.views.generic.edit import CreateView

class RecordView(LoginRequiredMixin, View):
    template_name = 'manage_records.html'
    form_class = PushTask
    success_url = reverse_lazy('some-view-name')
从django.url导入反向
从django.views.generic.edit导入CreateView
类记录视图(LoginRequiredMixin,视图):
template_name='manage_records.html'
form_class=PushTask
success\u url=reverse\u lazy('some-view-name')
在这里,表单在模板中的名称为
form
,而不是
formset
,但您的表单一开始就不是一个

注意:django中的表单通常有
表单
后缀,以避免与模型混淆。因此,您可能希望在
PushTask
上使用
PushTaskForm


正如我所怀疑的,问题出在我的
视图.py中。我相信这段代码
返回呈现(请求,self.template_名称,{'formset':formset})
在表单有机会检查验证之前运行

正确的代码:

#views.py
类记录视图(LoginRequiredMixin,视图):
template_name='manage_records.html'
用户名=“”
def get(自我,请求):
打印('我得到了表格')
form=PushTask()
返回呈现(请求,self.template_名称,{'form':form})
def post(自我,请求):
如果request.user.u经过身份验证:
打印('prepost')
表单=推送任务(request.POST)
打印('I'm in post function')
如果form.is_有效():
profile=form.save(commit=False)
#profile.ip_address=request.META['REMOTE_ADDR']
profile.dec_name=request.user
profile.save()
返回重定向('记录器')
打印('Prob Not')
args={'form':form}
返回呈现(请求,self.template_名称,{'form':form})

我很乐意接受任何其他解释。

请您描述一下您面临的问题和错误好吗?@PRMoureu正如我对我的标题所说的,在我将
RecordView(TemplateView)
更改为
RecordView(LoginRequiredMixin,View)后,表单将不会提交
我确实使用了
formset
,因为我懒得更改以前的设置,
返回HttpResponseRedirect('manage_records.html')
。我改了名字,我尝试了你的解决方案,但遗憾的是,它不起作用。我调试了代码,它甚至没有运行“def post(self,request):`.@Magotte:你定义了一个
按钮吗?我正在使用一个js脚本
javascript函数checkSubmit(e){if(e&&e.keyCode==13){document.forms[1]。submit();}
@Magotte:最好先检查它是否可以在没有这个javascript的情况下工作,从那以后,错误发生的地方就很清楚了。仍然没有什么。。。我相信是函数
post
get
造成了问题。