簡體   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