[英]How to upload multiple images using CreateView in Django
我有一个页面,用户可以在其中创建帖子。 我想让他有可能在同一页面上为这篇文章添加多张图片,但我不知道该怎么做。 有我的代码:
模型.py
class Blog(models.Model):
ACTIVITY_CHOICES = [
('active', 'Active'),
('inactive', 'Inactive')
]
title = models.CharField(max_length=100, verbose_name='title')
description = models.TextField(verbose_name='description')
tag = models.CharField(max_length=50, verbose_name='tag')
author = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, verbose_name='author')
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
activity = models.CharField(max_length=10, choices=ACTIVITY_CHOICES, default='inactive')
class Meta:
verbose_name = 'post'
verbose_name_plural = 'posts'
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('blog_detail', args=[str(self.pk)])
class Image(models.Model):
blog = models.ForeignKey(Blog, default=None, on_delete=models.CASCADE)
image = models.ImageField(upload_to=user_directory_path)
forms.py
class BlogForm(forms.ModelForm):
class Meta:
model = Blog
fields = '__all__'
class ImageForm(forms.ModelForm):
file_field = forms.ImageField(widget=forms.ClearableFileInput(attrs={'multiple': 'multiple'}))
class Meta:
model = Image
fields = ('image', )
视图.py
class BlogCreateView(CreateView):
model = Blog
template_name = 'blog/create_blog.html'
fields = ['title', 'description', 'tag']
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.author = self.request.user
self.object.save()
return HttpResponseRedirect(self.get_success_url())
create_post.html
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Create post</title>
</head>
<body>
<h2>Create post</h2>
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<button type="submit" value="save">Create post</button>
</form>
</body>
</html>
我认为模型 forms 和 html 没问题,我只需要在 views.py 中进行一些更改,但我不知道到底是什么。
你想要一个表单集。
结帐ìnlineformset_factory
: https://docs.djangoproject.com/en/4.0/topics/forms/modelforms/#inline-formsets
这将允许您在博客表单中维护Image
model 的多条记录。
FE 的东西有点笨重,所以如果你想让它以“更漂亮”的方式工作(或者可能是htmx
),你可能需要一些额外的 JS,但这会让你启动并运行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.