Home > Back-end >  Trying to save to database via ModelForm Django
Trying to save to database via ModelForm Django

Time:01-16

My form is not saving to the database or at least i know the form is not valid i just dont know why? because it will always skip to the else in the if form.is_valid() (print("didnt work!"))

the view.py:

def index(request):
    component = Component.objects.all()
    form = ComponentModelForm()
    if request.method == 'POST':
        form = ComponentModelForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('/maintenance')
        else:
            form = ComponentModelForm()
            print("didnt work!")
    context = {
        'components': component,
        'form': form,
    }
    return render(request, 'maintenance/index.html', context)

forms.py:

class ComponentModelForm(forms.ModelForm):
    note = forms.CharField(widget=forms.Textarea)
    image = forms.ImageField(error_messages = {'invalid':("Image files only")}, widget=forms.FileInput)
    class Meta:
        model = Component
        fields = ("name",
                  "manufacturer",
                  "model",
                  "serial_number",
                  "price",
                  "note",
                  "image",
                  "parent",)

the template form:

 {% load widget_tweaks %}
 <form  enctype="multipart/form-data" method='POST' action=''>
    {% csrf_token %}
    <div >
       <span >Name</span>
       {% render_field form.name   %}
       <span >Manufacturer</span>
       {% render_field form.manufacturer   %}
       <span >Model</span>
       {% render_field form.model   %}
       <span >Serial Number</span>
       {% render_field form.serial_number   %}
       <span >Price</span>
       {% render_field form.price   %}
       <span >Note</span>
       {% render_field form.note   %}
       {% render_field form.parent   %}
       <input type="submit"  value='Create Component' />
    </div>
    <div >

       <img  src='{%static 'imgs/sidebar/logo.png'%} ' />

       {% render_field form.image  %}
    </div>
 </form>

CodePudding user response:

You should not construct a new form when the form fails: a failed form will render the errors, such that the user knows what is going wrong, so:

def index(request):
    component = Component.objects.all()
    form = ComponentModelForm()
    if request.method == 'POST':
        form = ComponentModelForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('/maintenance')
        else:
            # Don't create a new form!
            print("didnt work!")
    context = {
        'components': component,
        'form': form,
    }
    return render(request, 'maintenance/index.html', context)
  •  Tags:  
  • Related