我一直在尝试使用ModelForm将我的POST数据保存到数据库但是由于某种原因我无法将其发送到那里。当我尝试发送表单时,页面将我重定向到正确的地方然而DB仍然是空的。我不知道我做错了什么。
forms.py
class AddProblem(forms.ModelForm):
class Meta:
model = problem
fields = ('lat','lng','email','importance','description','images')
models.py
class problem(models.Model):
lat = models.BigIntegerField()
lng = models.BigIntegerField()
email = models.EmailField(max_length=70,blank=True)
importance = models.IntegerField(default=1)
description = models.TextField()
images = models.FileField(upload_to='images/')
published = models.BooleanField()
def __str__(self):
return self.email
views.py
def addproblem(request):
temp_name = 'google_api/addproblem.html'
form = AddProblem(request.POST,request.FILES)
if request.method == 'POST':
if(form.is_valid()):
form.save()
form = AddProblem()
return redirect('/')
else:
messages.error(request, "Error")
context = {
}
return render(request, temp_name, context)
urls.py
urlpatterns = [
path('', views.index, name='index'),
path('add/', views.addproblem, name='addproblem'),
]
模板
<form action="/add/" method="POST">
{% csrf_token %}
<div class="form-group">
<label for="">Lat:</label>
<input class="form-control" id="lat" name="lat" disabled>
</div>
<div class="form-group">
<label for="">Lng:</label>
<input class="form-control" id="lng" name="lng" disabled>
</div>
<div class="form-group">
<label for="">Емайл</label>
<input type="email" class="form-control" id="email" placeholder="name@example.com" name="email">
</div>
<div class="form-group">
<label for="">Важност</label>
<select class="form-control" id="importance" name="importance">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
<option>10</option>
</select>
</div>
<div class="form-group">
<label for="">Описание на проблема.</label>
<textarea class="form-control" id="description" rows="3"></textarea>
</div>
<div class="form-group">
<div class="form-group files">
<label>Качете снимки</label>
<input type="file" class="form-control" id="images" name="images">
</div>
</div>
<div class="form-group">
<input type="submit" class="form-control" name="submit" value="Изпрати проблем">
</div>
</form>
答案 0 :(得分:0)
enter code here from django.views import generic from .models import Problem from .forms import AddProblem class CreateProblemView(generic.CreateView): model = Problem form_class = AddProblem success_url = reverse_lazy('index') template_name = 'google_api/addproblem.html'forms.py
from django import forms from .models import Problem class AddProblem(forms.ModelForm): model = Problem class Meta: model = Problem fields = '__all__'
模板
this add inside of form tag {% csrf_token %} {{form.as_p }} after btn type submit /form
答案 1 :(得分:0)
我设法解决了这个问题。所以我需要在我的表单上指定我的编码,以便它变成那样。
<form action="" method="POST" enctype="multipart/form-data">
然后必须修复 forms.py
class AddProblem(forms.ModelForm):
lat = forms.FloatField()
lng = forms.FloatField()
images = forms.FileField(widget=forms.ClearableFileInput(attrs={'multiple': True}))
class Meta:
model = problem
fields = ('lat','lng','email','importance','description','images')