首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django和Dropzone.js方法,使用映像创建实例

Django和Dropzone.js方法,使用映像创建实例
EN

Stack Overflow用户
提问于 2018-06-05 15:41:53
回答 1查看 138关注 0票数 0

我有两个模型ListingImage,其中一个清单可以有多个图像。

代码语言:javascript
运行
复制
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)来处理两个单一视图的表单,我已经做了以下的解决办法:

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

哪种方法更好?

views.py

代码语言:javascript
运行
复制
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添加图像时,还没有创建清单。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-05 18:43:09

我将提出我的解决方案,我已经在我的项目和工作的魅力。

  1. 表单,则dropzone.js初始化。
  2. 图像被提交并上传到定义的端点(url),这里django视图保存上传的文件(作为模型),返回保存的图像pk (或其他唯一标识符)。
  3. 客户端前端接收保存的图像pk并存储在隐藏的输入中(用于ex )。名为images),具有某种协议(用于ex )。pk1::pk2::pk3)
  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)

此外,为了避免db膨胀,我每1天运行cron作业来清理没有链接到任何表单的图像(以防用户放弃表单提交)。

霍普,这有帮助

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50704080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档