Django Form 没有更新数据库
Django Form is not updating the database
我正在制作一个表单网站。
但我的输入没有被添加到数据库中。
它以前有用,但现在不行了。
我所做的最后一次阻止它工作的更改是我表单中的 URL,因此当我提交表单时它可以转到另一个页面。
我的 html 模板是这样的
<div class="form-container">
<form enctype="multipart/form-data" action="/succes/" method="POST">
.....
在我添加这个之后它停止工作了
添加 {%url 'Form:thank'%} 后一切都变糟了。
<div class="form-container">
<form enctype="multipart/form-data" action="{%url 'Form:thank'%}" method="POST">
......
老实说,我现在迷路了。
并且不知道如何解决这个问题。
我是 Django 开发新手(所以我可能漏掉了什么)
urls.py
app_name = 'Form'
urlpatterns = [
path('', FormPage, name = "Home"),
]
当然,我删除了感谢页面以恢复到以前的状态。
感谢页面正在运行。如果你想知道
models.py
class Form(models.Model):
company_name = models.CharField(max_length=200, null=False, blank=False)
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
AIB_number = models.CharField(max_length=100)
position_title = models.CharField(max_length=200)
telephone = models.CharField(max_length=20)
email = models.EmailField()
job_duties = models.TextField()
access_justification = models.TextField()
wap_roa = models.CharField(max_length=255)
required_access = models.CharField(choices=RequestAccessChoices, max_length=200)
start_time = models.DateField(blank=True, null=True)
end_time = models.DateField(blank=True, null=True)
main_communications_room = models.ManyToManyField(MainCommunicationRoom, blank=True)
new_terminal_building = models.ManyToManyField(NewTerminalBuilding, blank=True)
old_terminal_building = models.ManyToManyField(OldTerminalBuilding, blank=True)
building = models.ManyToManyField(OtherBuilding, blank=True)
other_locations = models.TextField(blank=True )
specify_system_list = models.TextField(blank=True)
specify_equipment_list = models.TextField(blank=True)
specify_server_list = models.TextField(blank=True)
Specify_cables = models.TextField(blank=True)
agreed_to_terms = models.BooleanField(default=False)
submitted_date_time = models.DateTimeField(default=timezone.now)
def __str__(self):
return self.last_name
class FormFiles(models.Model):
files = models.FileField(upload_to = "uploaded_files", null=True, blank=True)
form_fk = models.ForeignKey(Form, on_delete=models.CASCADE, null=True, blank=True)
views.py
def FormPage(request):
if request.method == "POST":
form = Form(request.POST)
if form.is_valid():
bigform = form.save(commit=False)
print(f'is this even working {form}')
for f in request.FILES.getlist('files'):
inputs = FileInput(request.FILES, request.POST)
if inputs.is_valid():
fileinp = inputs.save(commit=False)
fileinp.files = f
fileinp.form_fk = bigform
fileinp.save()
else:
print(inputs.is_valid())
print(inputs.is_bound)
print(inputs.errors)
return HttpResponseRedirect('/success/')
else:
print(form.is_bound)
print(form.is_valid())
print(form.errors)
else:
form = Form()
inputs = FileInput()
dic = {
'form': form,
'fileinputs': FileInput
}
return render(request, 'formpage.html', {'dic': dic})
forms.py
class Form(forms.ModelForm):
class Meta:
model=Form
fields='__all__'
exclude = ['submitted_date_time']
error_css_class = 'error'
required_css_class = 'required'
widgets = {
'main_communications_room' : forms.CheckboxSelectMultiple(attrs={'class':'checkbox'}),
'new_terminal_building':forms.CheckboxSelectMultiple(attrs={'class':'checkbox'}),
'old_terminal_building': forms.CheckboxSelectMultiple(attrs={'class':'checkbox'}),
'building': forms.CheckboxSelectMultiple(attrs={'class':'checkbox'}),
'start_time':forms.DateInput(attrs={'type': 'date'}),
'end_time':forms.DateInput(attrs={'type': 'date'}),
'agreed_to_terms': forms.CheckboxInput(attrs={'required':True})
}
class 文件输入(forms.ModelForm):
class Meta:
model = FormFiles
fields = '__all__'
widgets ={
'files': forms.ClearableFileInput(attrs={'multiple':True}),
}
action="…"
应该引用 FromPage
,因为这是处理该表单的 POST 请求的视图。因此,这意味着您将其指定为:
<form enctype="multipart/form-data" <strong>action="{% url 'Form:Home' %}"</strong> method="POST">
…
</form>
然后在视图中处理将数据保存到数据库的逻辑,然后您可以 return 重定向响应到 thank-you 页面:
from django.shortcuts import <b>redirect</b>
def FormPage(request):
if request.method == 'POST':
form = Form(request.POST)
if form.is_valid():
bigform = form.save(commit=False)
print(f'is this even working {form}')
for f in request.FILES.getlist('files'):
inputs = FileInput(request.FILES, request.POST)
if inputs.is_valid():
fileinp = inputs.save(commit=False)
fileinp.files = f
fileinp.form_fk = bigform
fileinp.save()
# redirect to the Form:thank view
return <strong>redirect('Form:thank')</strong>
else:
form = Form()
inputs = FileInput()
dic = {
'form': form,
'fileinputs': FileInput
}
return render(request, 'formpage.html', {'dic': dic})
redirect('Form:thanks')
会将浏览器重定向到感谢页面。
我正在制作一个表单网站。 但我的输入没有被添加到数据库中。 它以前有用,但现在不行了。 我所做的最后一次阻止它工作的更改是我表单中的 URL,因此当我提交表单时它可以转到另一个页面。
我的 html 模板是这样的
<div class="form-container">
<form enctype="multipart/form-data" action="/succes/" method="POST">
.....
在我添加这个之后它停止工作了 添加 {%url 'Form:thank'%} 后一切都变糟了。
<div class="form-container">
<form enctype="multipart/form-data" action="{%url 'Form:thank'%}" method="POST">
......
老实说,我现在迷路了。 并且不知道如何解决这个问题。 我是 Django 开发新手(所以我可能漏掉了什么)
urls.py
app_name = 'Form'
urlpatterns = [
path('', FormPage, name = "Home"),
]
当然,我删除了感谢页面以恢复到以前的状态。 感谢页面正在运行。如果你想知道
models.py
class Form(models.Model):
company_name = models.CharField(max_length=200, null=False, blank=False)
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
AIB_number = models.CharField(max_length=100)
position_title = models.CharField(max_length=200)
telephone = models.CharField(max_length=20)
email = models.EmailField()
job_duties = models.TextField()
access_justification = models.TextField()
wap_roa = models.CharField(max_length=255)
required_access = models.CharField(choices=RequestAccessChoices, max_length=200)
start_time = models.DateField(blank=True, null=True)
end_time = models.DateField(blank=True, null=True)
main_communications_room = models.ManyToManyField(MainCommunicationRoom, blank=True)
new_terminal_building = models.ManyToManyField(NewTerminalBuilding, blank=True)
old_terminal_building = models.ManyToManyField(OldTerminalBuilding, blank=True)
building = models.ManyToManyField(OtherBuilding, blank=True)
other_locations = models.TextField(blank=True )
specify_system_list = models.TextField(blank=True)
specify_equipment_list = models.TextField(blank=True)
specify_server_list = models.TextField(blank=True)
Specify_cables = models.TextField(blank=True)
agreed_to_terms = models.BooleanField(default=False)
submitted_date_time = models.DateTimeField(default=timezone.now)
def __str__(self):
return self.last_name
class FormFiles(models.Model):
files = models.FileField(upload_to = "uploaded_files", null=True, blank=True)
form_fk = models.ForeignKey(Form, on_delete=models.CASCADE, null=True, blank=True)
views.py
def FormPage(request):
if request.method == "POST":
form = Form(request.POST)
if form.is_valid():
bigform = form.save(commit=False)
print(f'is this even working {form}')
for f in request.FILES.getlist('files'):
inputs = FileInput(request.FILES, request.POST)
if inputs.is_valid():
fileinp = inputs.save(commit=False)
fileinp.files = f
fileinp.form_fk = bigform
fileinp.save()
else:
print(inputs.is_valid())
print(inputs.is_bound)
print(inputs.errors)
return HttpResponseRedirect('/success/')
else:
print(form.is_bound)
print(form.is_valid())
print(form.errors)
else:
form = Form()
inputs = FileInput()
dic = {
'form': form,
'fileinputs': FileInput
}
return render(request, 'formpage.html', {'dic': dic})
forms.py
class Form(forms.ModelForm):
class Meta:
model=Form
fields='__all__'
exclude = ['submitted_date_time']
error_css_class = 'error'
required_css_class = 'required'
widgets = {
'main_communications_room' : forms.CheckboxSelectMultiple(attrs={'class':'checkbox'}),
'new_terminal_building':forms.CheckboxSelectMultiple(attrs={'class':'checkbox'}),
'old_terminal_building': forms.CheckboxSelectMultiple(attrs={'class':'checkbox'}),
'building': forms.CheckboxSelectMultiple(attrs={'class':'checkbox'}),
'start_time':forms.DateInput(attrs={'type': 'date'}),
'end_time':forms.DateInput(attrs={'type': 'date'}),
'agreed_to_terms': forms.CheckboxInput(attrs={'required':True})
}
class 文件输入(forms.ModelForm):
class Meta:
model = FormFiles
fields = '__all__'
widgets ={
'files': forms.ClearableFileInput(attrs={'multiple':True}),
}
action="…"
应该引用 FromPage
,因为这是处理该表单的 POST 请求的视图。因此,这意味着您将其指定为:
<form enctype="multipart/form-data" <strong>action="{% url 'Form:Home' %}"</strong> method="POST">
…
</form>
然后在视图中处理将数据保存到数据库的逻辑,然后您可以 return 重定向响应到 thank-you 页面:
from django.shortcuts import <b>redirect</b>
def FormPage(request):
if request.method == 'POST':
form = Form(request.POST)
if form.is_valid():
bigform = form.save(commit=False)
print(f'is this even working {form}')
for f in request.FILES.getlist('files'):
inputs = FileInput(request.FILES, request.POST)
if inputs.is_valid():
fileinp = inputs.save(commit=False)
fileinp.files = f
fileinp.form_fk = bigform
fileinp.save()
# redirect to the Form:thank view
return <strong>redirect('Form:thank')</strong>
else:
form = Form()
inputs = FileInput()
dic = {
'form': form,
'fileinputs': FileInput
}
return render(request, 'formpage.html', {'dic': dic})
redirect('Form:thanks')
会将浏览器重定向到感谢页面。