Django和Dropzone.js文件方法,使用图像创建实例

2024-09-30 04:33:53 发布

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

我有两个模型ListingImage,其中一个列表可以有多个图像。你知道吗

class Listing(models.Model):
    title = models.CharField(max_length=100, blank=False)

class ListingImage(models.Model):
    listing = models.ForeignKey(Listing, on_delete=models.CASCADE, related_name='images')
    image = models.ImageField(blank=True)

理想情况下,我想在一个页面上创建这样的列表,例如填写所有表单信息并在同一页面上添加图像。你知道吗

这似乎是不可能的(如果是请让我知道,但请注意dropzone.js文件是Ajax)使用单个视图处理2个窗体,我做了以下变通方法:

  1. 先创建列表,再添加第二步,将列表添加到已创建的 型号
  2. 创建一个占位符列表,向其中添加图像(通过Ajax) 在表单提交时,更改占位符信息。你知道吗

哪种方法更好?

视图.py

def add_image(request):
# process images: problem we have no listing_instance to add them to
    if request.method == 'POST':
        form = ListingImageForm(request.POST, request.FILES)
        if form.is_valid():
            ListingImage.objects.create(pk=None, listing=listing_instance)

            return HttpResponse(
                json.dumps({
                    "result": True,
                }),
                content_type="application/json"
            )

我在找方法学方面的建议。例如,要创建带有图像的列表,我需要先创建列表然后添加图像(2个步骤)还是先添加图像然后添加列表信息?我的问题是,如果我这样做了,当我使用Ajax添加图像时,列表还没有创建。你知道吗


Tags: 图像image信息true列表modelmodelsrequest
1条回答
网友
1楼 · 发布于 2024-09-30 04:33:53

我会提出我的解决方案,我已经在我的项目中实施,并像一个魅力工程。你知道吗

  1. 表单被呈现,dropzone.js文件已初始化
  2. 图像被提交并上传到定义的端点(url),这里django view保存上传的文件(作为模型),返回保存的图像pk(或其他唯一标识符)。你知道吗
  3. 客户端前端接收保存的映像pk,并使用某种协议(例如pk1::pk2::pk3)存储在隐藏的输入中(例如名为images
  4. 提交表单后,django表单验证通过,您将使用图像pks处理输入值,并从db获取条目: images = ListingImage.objects.filter(pk__in=request.POST.get('images').split('::'))
    我强烈建议对images值应用更多验证 此查询将为提交的表单提供所有用户上载的图像,最后将ListingImage条目更新为链接Listing条目 images.update(listing=newly_created_listing_entry)

另外,为了避免数据库膨胀,我每1天运行一次cron job来清理没有链接到任何表单的图像(以防用户放弃表单提交)

希望,这有帮助

相关问题 更多 >

    热门问题