将多个图像附加到帖子中的正确方法是什么?[江戈]

2024-03-29 10:28:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个webcomics平台上工作,我需要允许用户在一个帖子中上传多个图片。在

  • 理想情况下-尽可能简单,这样用户就不必刷新页面来上传每个图片,或者在添加图片之前创建并保存帖子。

  • 如果用户可以删除或重新排序的图像,这将是很好的。

  • 另外,我需要使它具有可伸缩性,这样以后就不会有问题了。

你能给我一些建议吗?在

图片是否应该有自己的模型,并用外键连接到帖子上?(不确定这是否合理,看起来有点难看)

或者我应该在post模型的某个字段中保留一个图像url列表,然后创建某种cdn并上传到那里?在

任何建议都非常感谢。在


Tags: 用户模型图像url排序情况图片平台
1条回答
网友
1楼 · 发布于 2024-03-29 10:28:15

如果你说的是规模,那么你需要弄清楚服务图像的最佳实践是什么。在

我建议您使用S3来提供静态文件(这也包括用户上传的文件)。按照this tutorial操作,它向您展示了如何从头开始设置。在

现在,深入研究您的模式,您将需要Post和{}模型:

py模型:

class Post(models.Model):
    title = models.CharField(max_length=200)
    slug = models.SlugField(max_length=50)
    body = models.TextField()

class PostImage(models.Model):
    image = models.ImageField(
        upload_to='<path_from_s3_tutorial>'
    )
    width_x = models.IntegerField()
    width_y = models.IntegerField()

    # Foreign Key to Post
    post = models.ForeignKey('Post', null=True, blank=True)

当你需要在表单.py它使用Inline Formset,允许您在创建帖子时上载多个图像,如下所示:

^{pr2}$

然后在视图中验证表单集,如下所示:

视图.py

def create_post(request, post_id):
    post = Post.objects.get(pk=post_id)
    PostImageInlineFormSet = inlineformset_factory(Post, PostImage, fields=('image',))
    if request.method == "POST":
        formset = PostImageFormSet(request.POST, request.FILES, instance=post)
        if formset.is_valid():
            formset.save()
            return redirect('index')
    else:
        formset = PostImageFormSet(instance=post)
    return render(request, 'manage_books.html', {'formset': formset})

注意:这个例子的大部分都是从我上面链接的Django文档中修改的。

相关问题 更多 >