Django 和 Dropzone.js 方法,创建带有图像的实例
Django and Dropzone.js methodology, creating an instance with images
我有 2 个型号 Listing
和 Image
,其中一个列表可以有多个图像。
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 个表单,我已经做了以下解决方法:
- 先创建listings,添加第二步添加listings到created
型号
- 创建占位符列表,向其中添加图像(通过 Ajax)
在表单提交上,更改占位符信息。
哪种方法更好?
views.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.
添加图像时,列表尚未创建
我会提出我的解决方案,我已经在我的项目中实施了并且效果很好。
- 表单已呈现,dropzone.js已初始化
- 图片被提交并上传到定义的端点(url),这里django视图保存上传的文件(作为模型),returns保存图片
pk
(或其他独特的标识符)。
- 客户端前端接收保存的图像
pk
并使用某种协议(例如 pk1::pk2::pk3
)存储在隐藏输入中(例如命名为 images
)
- 提交表单后,django 表单验证已通过,您正在使用图像 pks 处理输入值并从数据库获取条目:
images = ListingImage.objects.filter(pk__in=request.POST.get('images').split('::'))
我强烈建议对 images
值应用更多验证
此查询将为您提供所有用户上传的提交表单的图像,最后您将更新 ListingImage
条目为 link Listing
条目
images.update(listing=newly_created_listing_entry)
此外,为了避免数据库膨胀,我 运行 每 1 天执行一次 cron 作业以清理未 link 编辑到任何表单的图像(以防用户放弃表单提交)
希望,这有帮助
我有 2 个型号 Listing
和 Image
,其中一个列表可以有多个图像。
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 个表单,我已经做了以下解决方法:
- 先创建listings,添加第二步添加listings到created 型号
- 创建占位符列表,向其中添加图像(通过 Ajax) 在表单提交上,更改占位符信息。
哪种方法更好?
views.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.
添加图像时,列表尚未创建我会提出我的解决方案,我已经在我的项目中实施了并且效果很好。
- 表单已呈现,dropzone.js已初始化
- 图片被提交并上传到定义的端点(url),这里django视图保存上传的文件(作为模型),returns保存图片
pk
(或其他独特的标识符)。 - 客户端前端接收保存的图像
pk
并使用某种协议(例如pk1::pk2::pk3
)存储在隐藏输入中(例如命名为images
) - 提交表单后,django 表单验证已通过,您正在使用图像 pks 处理输入值并从数据库获取条目:
images = ListingImage.objects.filter(pk__in=request.POST.get('images').split('::'))
我强烈建议对images
值应用更多验证 此查询将为您提供所有用户上传的提交表单的图像,最后您将更新ListingImage
条目为 linkListing
条目images.update(listing=newly_created_listing_entry)
此外,为了避免数据库膨胀,我 运行 每 1 天执行一次 cron 作业以清理未 link 编辑到任何表单的图像(以防用户放弃表单提交)
希望,这有帮助