繁体   English   中英

如何在 Django 中使用 CreateView 上传多个图像

[英]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_factoryhttps://docs.djangoproject.com/en/4.0/topics/forms/modelforms/#inline-formsets

这将允许您在博客表单中维护Image model 的多条记录。

FE 的东西有点笨重,所以如果你想让它以“更漂亮”的方式工作(或者可能是htmx ),你可能需要一些额外的 JS,但这会让你启动并运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM