热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Django:使用视图和表单复制模型对象-Django:copyamodelobjectusingviewsandforms

IhaveaDjango(1.8)modelthathassomeclassbasedgenericviews:list,update,delete,detail,c

I have a Django (1.8) model that has some class based generic views: list, update, delete, detail, create. https://docs.djangoproject.com/en/1.8/ref/class-based-views/

我有一个Django(1.8)模型,它有一些基于类的通用视图:列表、更新、删除、细节、创建。https://docs.djangoproject.com/en/1.8/ref/class-based-views/

On the detail or list view, I have a button that I want to do this:

在detail或list视图中,我有一个按钮,我想这样做:

  1. Create a copy of the object
  2. 创建对象的副本
  3. Load the data into a form and display for the user to edit/save the new object (could use the existing update or create views, or a new one?)
  4. 将数据加载到窗体中并显示给用户以编辑/保存新对象(是否可以使用现有的更新或创建视图,或者使用新的视图?)

I can clone the model with this info: How do I clone a Django model instance object and save it to the database?

我可以用以下信息克隆模型:如何克隆一个Django模型实例对象并将其保存到数据库中?

But I can't make the leap to get this done by starting at a view and ending at a form with the copied object data.

但是我不能通过从视图开始,以复制的对象数据结束的形式来实现这一点。

Thanks!

谢谢!

partial views.py

部分views.py

class List(ListView):
  model = Announcement
  template_name = 'announcements/list.html'

class Create(CreateView):
  model = Announcement
  form_class = AnnouncementForm
  template_name = 'announcements/form.html'

  def form_valid(self, form):
    data = form.save(commit=False)
    data.author = self.request.user
    data.save()
    return super(Create, self).form_valid(form)

class Update(UpdateView):
  model = Announcement
  form_class = AnnouncementForm
  template_name = 'announcements/form_update.html'

  @method_decorator(login_required)
  def dispatch(self, *args, **kwargs):
    return super(Update, self).dispatch(*args, **kwargs)

partial forms.py

部分forms.py

class AnnouncementForm(forms.ModelForm):
    class Meta:
        model = Announcement
        exclude = ['author']

partial list.html

部分list.html

{% for object in object_list %}
      

object.title

Delete Edit Copy {% endfor %}

What I hit the "Copy" button in list.html, I want to duplicate the object and open the new duplicate in a form for editing.

我点击列表中的“复制”按钮。html,我想复制这个对象,并在一个窗体中打开新的副本以供编辑。

2 个解决方案

#1


1  

It think I figured it out!

它以为是我想出来的!

urls.py

urls . py

#eg: myapp/5/copy/
#where 5 is the item I want to copy
url(r'^(?P[0-9]+)/copy/$', views.item_copy, name='item_copy'),

views.py:

views.py:

def item_copy(request, id):
    new_item = get_object_or_404(MyModel, pk = id)
    new_item.pk = None #autogen a new pk (item_id)
    new_item.name = "Copy of " + new_item.name #need to change uniques

    form =  MyForm(request.POST or None, instance = new_item)

    if form.is_valid():
        form.save()
        return redirect('my_view')

    cOntext= {
        "form": form,
        #other context
    } 

    return render(request, "form.html", context)

#2


0  

class CopyView(ManageAnnouncement, DeleteView):

    def dispatch(self, *args, **kwargs):
        obj = self.get_object()
        obj.pk = None
        copy = obj.save()
        return HttpResponseRedirect('/announcement/edit/%s' %(copy.id))
        # Change the redirect page to the one you need.

I have inherited a base class called ManageAnnouncement. You can put methods or variables common to multiple classes in an abstract base class and inherit it in adding, editing deleting, copying etc, so that code gets 'dry'.

我继承了一个基类ManageAnnouncement。您可以在抽象基类中放置多个类的通用方法或变量,并在添加、编辑、删除、复制等过程中继承这些方法或变量,从而使代码变得“枯燥”。


推荐阅读
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • 本文介绍了在MFC下利用C++和MFC的特性动态创建窗口的方法,包括继承现有的MFC类并加以改造、插入工具栏和状态栏对象的声明等。同时还提到了窗口销毁的处理方法。本文详细介绍了实现方法并给出了相关注意事项。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • 本文分析了Wince程序内存和存储内存的分布及作用。Wince内存包括系统内存、对象存储和程序内存,其中系统内存占用了一部分SDRAM,而剩下的30M为程序内存和存储内存。对象存储是嵌入式wince操作系统中的一个新概念,常用于消费电子设备中。此外,文章还介绍了主电源和后备电池在操作系统中的作用。 ... [详细]
  • 本文介绍了pack布局管理器在Perl/Tk中的使用方法及注意事项。通过调用pack()方法,可以控制部件在显示窗口中的位置和大小。同时,本文还提到了在使用pack布局管理器时,应注意将部件分组以便在水平和垂直方向上进行堆放。此外,还介绍了使用Frame部件或Toplevel部件来组织部件在窗口内的方法。最后,本文强调了在使用pack布局管理器时,应避免在中间切换到grid布局管理器,以免造成混乱。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 本文介绍了GregorianCalendar类的基本信息,包括它是Calendar的子类,提供了世界上大多数国家使用的标准日历系统。默认情况下,它对应格里高利日历创立时的日期,但可以通过调用setGregorianChange()方法来更改起始日期。同时,文中还提到了GregorianCalendar类为每个日历字段使用的默认值。 ... [详细]
  • CentOS7.8下编译muduo库找不到Boost库报错的解决方法
    本文介绍了在CentOS7.8下编译muduo库时出现找不到Boost库报错的问题,并提供了解决方法。文章详细介绍了从Github上下载muduo和muduo-tutorial源代码的步骤,并指导如何编译muduo库。最后,作者提供了陈硕老师的Github链接和muduo库的简介。 ... [详细]
author-avatar
天蝎完美_主义
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有