使用Django将数据保存在数据库中

时间:2018-02-20 23:38:30

标签: python django

我一直在尝试使用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>

2 个答案:

答案 0 :(得分:0)

Views.py

    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')