在 django 中保存多个带有表单的图像



django 中保存多个图像的最佳方法是什么?

我有 2 个字段Article模态:descriptionimage .我尝试了下一个代码,但我的 currect 表单允许用户只上传一个图像文件。我需要用户可以在其中创建带有多个图像的文章的表单。

也许有人可以建议好的例子或应用程序。我将非常感谢任何帮助。

models.py:

class Article(models.Model):
    description = models.TextField(_('Description'))
class Image(models.Model):
    article= models.ForeignKey(Article, on_delete=models.CASCADE)
    image = models.FileField(_('Image'), upload_to='images/%Y/%m/%d/')

forms.py:

class ArticleForm(forms.ModelForm):
    class Meta:
        model = Article
        fields = ('description', )
    images = MultiFileField()
    def save(self, commit=True):
        instance = super(ArticleForm, self).save(commit)
        for each in self.cleaned_data['images']:
            Image.objects.create(image=each, article=instance)
        return instance

views.py:

def article_add(request):
    data = dict()
    if request.method == 'POST':
        article_form = ArticleForm(request.POST, request.FILES)
        if article_form.is_valid():
            article = article_form.save(commit=False)
            ******
            article.save()
            data['form_is_valid'] = True
            articles = Article.objects.all
            context = {'articles': articles}
            context.update(csrf(request))
            data['html_article'] = render_to_string('project/article_list.html', context)
        else:
            data['form_is_valid'] = False
    else:
        article_form = ArticleForm()
    context = {'article_form': article_form}
    data['html_article_form'] = render_to_string('project/article_add.html', context, request=request)
    return JsonResponse(data)

article_add.html:

{% load widget_tweaks %}
<form method="post" action="{% url 'article_add' %}" class="article-add-form dropzone">
    {% csrf_token %}
    {% for field in article_form %}
    <div class="form-group{% if field.errors %} has-danger{% endif %}">
       <label class="form-control-label" for="{{ field.id_for_label }}">{{ field.label }}</label>
       {% render_field field class="form-control" %}
       {% for error in field.errors %}
          <div class="form-control-feedback">{{ error }}</div>
       {% endfor %}
    </div>
    {% endfor %}
    <button type="submit">Submit</button>
</form>
如果你想

为一篇文章提供多张图片,也许你可以使用 django 多上传,点击这里查看文档。

此外,您可能需要为图像创建单独的模型并将其关联到文章模型。

class Image(models.Model):
    image = models.FileField()
    article = models.ForeignKey(Article)

有关表单的其余部分在文档中。此外,从文章模型中删除图像字段。Django-MultiUpload显示了如何使用单个表单上传多个图像。

模板集也可能有所帮助,看这里..

编辑

在 html 中添加 enctype="multipart/form-data"> 到表单中

<form method="post" action="{% url 'article_add' %}" class="article-add-form dropzone" enctype="multipart/form-data">

最新更新