【问题标题】:Trying to save to database via ModelForm Django试图通过 ModelForm Django 保存到数据库
【发布时间】:2022-01-15 14:50:29
【问题描述】:

我的表单没有保存到数据库中,或者至少我知道表单无效我只是不知道为什么?因为它总是会跳到 if form.is_valid() (print("didnt work!")) 中的 else

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",)

模板形式:

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

       <img class="maintenance-component-img" src='{%static 'imgs/sidebar/logo.png'%} ' />

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

【问题讨论】:

    标签: django django-models django-views django-forms django-templates


    【解决方案1】:

    你应该在表单失败时构造一个新表单:失败的表单会呈现错误,这样用户就知道出了什么问题,所以:

    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)

    【讨论】:

    • 谢谢你,你太棒了,这帮助我找到了我没有提供请求的图像字段中的问题。文件我会将这个答案标记为已接受
    猜你喜欢
    • 1970-01-01
    • 2018-07-07
    • 2018-10-10
    • 1970-01-01
    • 2013-08-19
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    相关资源
    最近更新 更多