[英]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.