Django编辑用户生成的对象

时间:2014-08-28 01:11:31

标签: ajax django

我正在试图找出如何对用户生成的对象进行内联编辑,粗略的程序(没有代码只是步骤),以及是否有一些方法可以在没有AJAX的情况下执行此操作 - 当然它不再是“内联”了。

假设用户对象只有1行文本和1张图像。像,

class UserObject(models.Model):
    text = models.CharField()
    image_path = models.CharField()

如果我要使用AJAX,这会是怎么回事? (对不起,这很模糊,我可以弄清楚只是试图看看我是否理解正确的概念)

  1. 创建表单,使用属于当前用户的对象实例填充它
  2. 在图片旁边,我会有一个“删除”按钮,它会触发对某个URL的AJAX调用,这个URL类似project/remove/ab12345,它连接到处理它的视图。
  3. 等待AJAX​​呼叫完成
  4. 然后以某种方式移除图像和按钮,可能只是删除包含它的div
  5. 是吗?

    另外,如果我不想使用AJAX怎么办?它会是这样的吗?

    1. 创建表单,使用属于当前用户的对象实例填充它
    2. 在图片旁边,我会有一个“删除”按钮,该按钮直接链接到类似project/remove/ab12345的网址,该网址连接到处理它的视图
    3. 在视图删除图像后,它会返回到编辑页面,该页面只会刷新并且图像不再存在。
    4. 任何指针都将不胜感激!!我可以弄清楚编码的细节,只是想知道我是否正确理解这些概念。

2 个答案:

答案 0 :(得分:0)

用户创建的对象与您自己创建的对象没有什么不同(除非您必须怀疑潜在的恶意输入!)。能够在管理界面之外编辑对象的最简单方法是使用内置的UpdateView。同样,您可以使用DeleteView删除它们。如果您想限制可以编辑对象,可以使用django braces中的PermissionRequiredMixin

答案 1 :(得分:0)

好的,因为我发布了这个非常模糊的问题,我将回答它。

AJAX免费: AJAX免费版本就像我描述的那样,创建一个视图和一个删除图像的URL,然后返回到引用页面。接下来尝试AJAX版本,它基本上需要一个返回某种失败或成功信号的视图。

<强> urls.py

url('^project/remove_image/(?P<image_id_string>[0-9A-Fa-f]+)/$', pbrand.views.ProjectRemoveImageView.as_view(), name='project_remove_image'),

<强> views.py

class ProjectRemoveImageView(View):
    redirect_url = '/project/edit'  # the editing url 

    def get(self, request, image_id_string, *args, **kwargs):
        # ... some checks on permissions            
        image.delete()
        return HttpResponseRedirect(self.redirect_url + "/" + project.id_string)
模板内的

<a class = "btn btn-default btn-sm" href="{% url 'project_remove_image' i.id_string %}" role="button">remove</a>