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

Python Django:使用视图和表单复制模型对象,python,django,Python,Django,我有一个Django(1.8)模型,它有一些基于类的通用视图:列表、更新、删除、详细信息、创建。 在“详细信息”或“列表”视图上,我有一个按钮要执行此操作: 创建对象的副本 将数据加载到表单中,并显示给用户以编辑/保存新对象(可以使用现有的更新或创建视图,还是使用新视图?) 我可以使用以下信息克隆模型: 但是,我不能通过从视图开始,到带有复制对象数据的表单结束来实现这一点 谢谢 局部视图.py class List(ListView): model = Announcement te

我有一个Django(1.8)模型,它有一些基于类的通用视图:列表、更新、删除、详细信息、创建。

在“详细信息”或“列表”视图上,我有一个按钮要执行此操作:

  • 创建对象的副本
  • 将数据加载到表单中,并显示给用户以编辑/保存新对象(可以使用现有的更新或创建视图,还是使用新视图?)
  • 我可以使用以下信息克隆模型:

    但是,我不能通过从视图开始,到带有复制对象数据的表单结束来实现这一点

    谢谢

    局部视图.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)
    
    class AnnouncementForm(forms.ModelForm):
        class Meta:
            model = Announcement
            exclude = ['author']
    
    部分形式.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)
    
    class AnnouncementForm(forms.ModelForm):
        class Meta:
            model = Announcement
            exclude = ['author']
    
    部分列表.html

    {% for object in object_list %}
          <p>object.title</p>
          <a class="btn btn-danger" href="{% url 'announcements:delete' object.id %}" role="button">Delete</a>
          <a class="btn btn-info" href="{% url 'announcements:update' object.id %}" role="button">Edit</a>
          <a class="btn btn-primary" href="" role="button">Copy</a>
    {% endfor %}
    
    {%for object_list%}
    object.title

    {%endfor%}

    当我点击list.html中的“复制”按钮时,我想复制对象,并以一种形式打开新的副本进行编辑。

    我想我找到了

    url.py

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

    我继承了一个名为ManageAnnouncement的基类。您可以将多个类共有的方法或变量放在抽象基类中,并在添加、编辑、删除、复制等过程中继承它,使代码变得“干燥”。

    欢迎使用堆栈溢出!这个问题有点宽泛;您是否可以包含有关遇到的特定问题的信息?请看,谢谢,我添加了一些特定的代码,这是否足够缩小范围?