【问题标题】:Django get image from ModelFormDjango 从 ModelForm 获取图像
【发布时间】:2018-01-18 11:04:25
【问题描述】:

我有一个包含像这样的 ImageField 的模型:

class MyModel(models.Model):
    photo = models.ImageField()

还有如下形式:

class MyModelForm(forms.ModelForm):
    class Meta:
        model = MyModel
        fields = ['photo',]

在我看来:

def show_form(request):
    form = MyModelForm(request.POST or None)
    content = {
        'form': form,
    }

    if form.is_valid():
        mymodel = form.save(commit=False)
        mymodel.save()

    return render(request, 'appname/template.html', content)

还有我的模板:

<!DOCTYPE html>
<html>
  <body>
    <form action="" method="POST">
      {% csrf_token %}
      <table align="center">
        {{ form.as_table }}
        <tr>
          <td>
            <input type="submit" value="Submit" />
          </td>
        </tr>
      </table>
    </form>
  </body>
</html>

但是每当我选择一张图片并单击提交时,表单都会告诉我该字段是必需的,并且没有保存它。

提前致谢。

【问题讨论】:

    标签: python html django django-forms


    【解决方案1】:

    你需要在ImageField中提供和upload_to参数

    photo = models.ImageField(upload_to='images')
    

    然后制作这样的表格

    <form action="" method="POST" enctype="multipart/form-data">
    

    并确保您已定义 MEDIA_URLMEDIA_ROOT

    并将您的视图更改为此

    def show_form(request):
        if request.method == 'POST':
           form = MyModelForm(request.POST or None)
           if form.is_valid():
              mymodel = form.save(commit=False)
              mymodel.save()
        else:
           content = {
            'form': form,
            }
           return render(request, 'appname/template.html', content)
    

    【讨论】:

    • 可悲的是还是同样的错误,我没有忘记迁移
    • 您是否在设置文件中声明了 MEDIA_ROOT 和 MEDIA_URL
    • 是的,MEDIA_URL = '/media/'MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
    猜你喜欢
    • 2015-03-20
    • 2018-03-26
    • 1970-01-01
    • 1970-01-01
    • 2015-05-24
    • 2016-03-02
    • 1970-01-01
    • 2022-01-11
    • 2010-10-18
    相关资源
    最近更新 更多