Python 在django中使用表单保存多个图像
在django中保存多个图像的最佳方法是什么 我有Python 在django中使用表单保存多个图像,python,django,python-3.x,django-1.10,Python,Django,Python 3.x,Django 1.10,在django中保存多个图像的最佳方法是什么 我有文章模式,有两个字段:描述和图像。我尝试了下一个代码,但我的当前表单只允许用户上传一个图像文件。我需要的形式,用户可以创建几个图像的文章 也许有人可以给好的例子或应用提供建议。我将非常感谢任何帮助 型号。py: class Article(models.Model): description = models.TextField(_('Description')) class Image(models.Model): artic
文章
模式,有两个字段:描述
和图像
。我尝试了下一个代码,但我的当前表单只允许用户上传一个图像文件。我需要的形式,用户可以创建几个图像的文章
也许有人可以给好的例子或应用提供建议。我将非常感谢任何帮助
型号。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/')
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
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)
{% 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>
forms.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/')
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
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)
{% 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>
视图。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/')
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
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)
{% 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>
文章\u add.html:
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/')
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
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)
{% 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>
{%load widget\u tweaks%}
{%csrf_令牌%}
{文章中字段的%u形式%}
{{field.label}
{%render_field class=“form control”%}
{%字段中有错误。错误%}
{{error}}
{%endfor%}
{%endfor%}
提交
如果你想为一篇文章提供多张图片,也许你可以使用django multi upload
此外,您可能需要为图像创建单独的模型,并将其与文章模型相关联
class Image(models.Model):
image = models.FileField()
article = models.ForeignKey(Article)
关于表格的其余部分在文档中。
另外,从文章模型中删除图像字段。Django MultiUpload显示了如何使用单个表单上载多个图像
或
表单集也很有用,
编辑
在html格式的表单中添加enctype=“多部分/表单数据”
<form method="post" action="{% url 'article_add' %}" class="article-add-form dropzone" enctype="multipart/form-data">
您需要的是一个表单集。此外,您可能必须将用户
指定为此模型的外键。我也考虑过formset,但正如我在formset中所理解的那样,我需要为每个图像文件创建一个单独的字段。我需要按一个字段加载图像。你有什么想法吗?也许有一些有用的应用?谢谢你的链接。我对django multiupload应用程序有一些问题。请再次查看我的帖子。我有图像场的形式。现在,使用这个应用程序后,我可以加载几个图像,但当我提交表单时,它会出现错误,因为“需要图像字段”,并清理字段。我的错在哪里?第二个问题:是否可以使用相同的表单编辑文章。假设我想在将来更新文章信息(删除旧图片或添加新图片)。我不明白你的意思。你是什么意思,我的朋友对不起,伙计。。。我在想别的事情。。。为了澄清,如果你需要更多的帮助,那么再发布一个关于你所做的事情的问题。。同样,它可以做=>编辑文章和上传图片。但是最好再发一个问题,而不是在这里问……你对答案满意吗?我不认为再问同样的问题是个好主意。它将被复制。这当然很伤心,但无论如何都要感谢你。。。