def test_movenodeform_save(self):
        c = Category.objects.get(pk=2)
        form = MoveNodeForm(
            c,
            {
                "target": "5",
                "position": "first-child",
            },
        )
        self.assertTrue(form.is_valid())
        form.save()

        self.assertTreeEqual(
            Category.objects.all(),
            """
            1 - 1 0 1 20
            5 1 1 1 2 13
            2 5 1 2 3 8
            3 2 1 3 4 5
            4 2 1 3 6 7
            6 5 1 2 9 10
            7 5 1 2 11 12
            8 1 1 1 14 19
            9 8 1 2 15 16
            10 8 1 2 17 18
        """,
        )
 def post(self, request, *args, **kwargs):
     form = MoveNodeForm(self.files, request.POST)
     if form.is_valid():
         try:
             print(form.data['target'])
             files = form.save()
             return HttpResponseRedirect('/')
         except InvalidMove:
             print('invalid')
             return HttpResponseRedirect('/')
     return HttpResponseRedirect('/')
示例#3
0
    def move_view(self, request, object_id, extra_context=None):
        """The 'move node' admin view for this model."""

        opts = self.model._meta
        app_label = opts.app_label

        obj = self.get_object(request, object_id)

        if not self.has_change_permission(request, obj):
            raise PermissionDenied

        if obj is None:
            raise Http404(_('%(name)s object with primary key %(key)r does not exist.') % {'name': force_unicode(opts.verbose_name), 'key': object_id})

        if request.POST: # The user has already confirmed the deletion.
            form = MoveNodeForm(obj, request.POST)
            if form.is_valid():
                if "johnny" in django_settings.INSTALLED_APPS:
                    from johnny.cache import invalidate
                    invalidate(self.model)

                form.save()

            self.message_user(request, ugettext('%s has been moved to a new position.') %
                obj)
            return HttpResponseRedirect("../../")
        else:
            form = MoveNodeForm(obj)

        object_name = force_unicode(opts.verbose_name)

        context = {
            "title": _('Move: %s') % force_unicode(obj),
            "form": form,
            "object_name": unicode(obj),
            "object": obj,
            "opts": opts,
            #"root_path": self.admin_site.root_path,
            "app_label": app_label,
        }
        context.update(extra_context or {})
        context_instance = template.RequestContext(request, current_app=self.admin_site.name)
        return render_to_response(self.delete_confirmation_template or [
            "admin/%s/%s/move_node.html" % (app_label, opts.object_name.lower()),
            "admin/%s/move_node.html" % app_label,
            "admin/move_node.html"
        ], context, context_instance=context_instance)
示例#4
0
 def test_movenodeform(self):
     self.maxDiff = 2000
     form = MoveNodeForm(Genre.objects.get(pk=7))
     # Required attribute on select widgets depends on Django versions.
     required_on_select = django.VERSION >= (1, 10)
     required_on_select_without_empty = required_on_select and django.VERSION < (
         1, 11)
     expected = (
         '<tr><th><label for="id_target">Target:</label></th>'
         '<td><select name="target" size="10" id="id_target" {required}>'
         '<option value="" selected>---------</option>'
         '<option value="1"> Action</option>'
         '<option value="2">--- Platformer</option>'
         '<option value="3">------ 2D Platformer</option>'
         '<option value="4">------ 3D Platformer</option>'
         '<option value="5">------ 4D Platformer</option>'
         '<option value="6">--- Shootemup</option>'
         '<option value="8">------ Horizontal Scrolling Shootemup</option>'
         '<option value="9"> Role-playing Game</option>'
         '<option value="10">--- Action RPG</option>'
         '<option value="11">--- Tactical RPG</option>'
         '</select></td></tr>'
         '<tr><th><label for="id_position">Position:</label></th>'
         '<td><select name="position" id="id_position" {required_no_empty}>'
         '<option value="first-child">First child</option>'
         '<option value="last-child">Last child</option>'
         '<option value="left">Left sibling</option>'
         '<option value="right">Right sibling</option>'
         '</select></td></tr>').format(
             required='required' if required_on_select else '',
             required_no_empty='required'
             if required_on_select_without_empty else '')
     self.assertHTMLEqual(str(form), expected)
     form = MoveNodeForm(Genre.objects.get(pk=7),
                         level_indicator='+--',
                         target_select_size=5)
     self.assertIn('size="5"', str(form['target']))
     self.assertInHTML('<option value="3">+--+-- 2D Platformer</option>',
                       str(form['target']))
     form = MoveNodeForm(Genre.objects.get(pk=7),
                         position_choices=(('left', 'left'), ))
     self.assertHTMLEqual(str(form['position']), (
         '<select id="id_position" name="position" {required}>'
         '<option value="left">left</option>'
         '</select>'
     ).format(
         required='required' if required_on_select_without_empty else ''))
 def get(self, request, *args, **kwargs):
     form = MoveNodeForm(self.files)
     # return render(request, self.page, {'nodes':File.objects.all()})
     return render(request, self.page, {
         'form': form,
         'files': self.files,
         'files_tree': File.objects.all()
     })
 def test_movenodeform(self):
     self.maxDiff = 2000
     form = MoveNodeForm(Genre.objects.get(pk=7))
     expected = (
         '<tr><th><label for="id_target">Target:</label></th>'
         '<td><select name="target" size="10" id="id_target" required>'
         '<option value="" selected>---------</option>'
         '<option value="1"> Action</option>'
         '<option value="2">--- Platformer</option>'
         '<option value="3">------ 2D Platformer</option>'
         '<option value="4">------ 3D Platformer</option>'
         '<option value="5">------ 4D Platformer</option>'
         '<option value="6">--- Shootemup</option>'
         '<option value="8">------ Horizontal Scrolling Shootemup</option>'
         '<option value="9"> Role-playing Game</option>'
         '<option value="10">--- Action RPG</option>'
         '<option value="11">--- Tactical RPG</option>'
         "</select></td></tr>"
         '<tr><th><label for="id_position">Position:</label></th>'
         '<td><select name="position" id="id_position">'
         '<option value="first-child">First child</option>'
         '<option value="last-child">Last child</option>'
         '<option value="left">Left sibling</option>'
         '<option value="right">Right sibling</option>'
         "</select></td></tr>"
     )
     self.assertHTMLEqual(str(form), expected)
     form = MoveNodeForm(
         Genre.objects.get(pk=7), level_indicator="+--", target_select_size=5
     )
     self.assertIn('size="5"', str(form["target"]))
     self.assertInHTML(
         '<option value="3">+--+-- 2D Platformer</option>', str(form["target"])
     )
     form = MoveNodeForm(
         Genre.objects.get(pk=7), position_choices=(("left", "left"),)
     )
     self.assertHTMLEqual(
         str(form["position"]),
         (
             '<select id="id_position" name="position">'
             '<option value="left">left</option>'
             "</select>"
         ),
     )
示例#7
0
    def test_movenodeform_save(self):
        c = Category.objects.get(pk=2)
        form = MoveNodeForm(c, {
            'target': '5',
            'position': 'first-child',
        })
        self.assertTrue(form.is_valid())
        form.save()

        self.assertTreeEqual(Category.objects.all(), '''
            1 - 1 0 1 20
            5 1 1 1 2 13
            2 5 1 2 3 8
            3 2 1 3 4 5
            4 2 1 3 6 7
            6 5 1 2 9 10
            7 5 1 2 11 12
            8 1 1 1 14 19
            9 8 1 2 15 16
            10 8 1 2 17 18
        ''')
示例#8
0
    def test_movenodeform_save(self):
        c = Category.objects.get(pk=2)
        form = MoveNodeForm(c, {
            'target': '5',
            'position': 'first-child',
        })
        self.assertTrue(form.is_valid())
        form.save()

        self.assertTreeEqual(Category.objects.all(), '''
            1 - 1 0 1 20
            5 1 1 1 2 13
            2 5 1 2 3 8
            3 2 1 3 4 5
            4 2 1 3 6 7
            6 5 1 2 9 10
            7 5 1 2 11 12
            8 1 1 1 14 19
            9 8 1 2 15 16
            10 8 1 2 17 18
        ''')
示例#9
0
文件: html.py 项目: francisl/vcms
def testCMSMenuForm(request, menuid):
    from django.http import HttpResponseRedirect
    from vcms.www.models.menu import CMSMenu
    from mptt.exceptions import InvalidMove
    from mptt.forms import MoveNodeForm
    from django.conf import settings

    menu = get_object_or_404(CMSMenu, id=menuid)
    if request.method == 'POST':
        form = MoveNodeForm(menu,
                            request.POST,
                            valid_targets=CMSMenu.objects.all())
        if form.is_valid():
            try:
                menu = form.save()
            except InvalidMove:
                pass
    else:
        form = MoveNodeForm(menu)

    return render_to_response('testmovemenu.html', {
        'form': form,
        'menu': menu,
        'page_info': _get_page_parameters()
    },
                              context_instance=RequestContext(request))
示例#10
0
def move(request, url):
    url, _ = canonicalize_url(url)
    p = get_object_or_404(Page, url=url)
    
    if request.method == 'POST':
        node_form = MoveNodeForm(p, request.POST)
        if node_form.is_valid():
            old_url = p.url
            p = node_form.save()
            url_form = PageMoveForm(request.POST, instance=p)
            if url_form.is_valid():
                p = url_form.save()
                new_url = p.calculated_url
                if old_url != new_url:
                    message = "Moved from '%s' to '%s'." % (old_url, p.calculated_url)
                else:
                    message = "Moved without changing url."
                reversion.revision.comment = message
                reversion.revision.user = request.user
                
                return HttpResponseRedirect(p.get_absolute_url())
        else:
            url_form = PageMoveForm(request.POST, instance=p)
    else:
        url_form = PageMoveForm(instance=p)
        node_form = MoveNodeForm(p)
    
    return render_to_response('podstakannik/move.html', {'url_form' : url_form, 'node_form' : node_form, 'page' : p}, context_instance=RequestContext(request))
示例#11
0
文件: html.py 项目: francisl/vcms
def testCMSMenuForm(request, menuid):
    from django.http import HttpResponseRedirect
    from vcms.www.models.menu import CMSMenu
    from mptt.exceptions import InvalidMove
    from mptt.forms import MoveNodeForm
    from django.conf import settings

    menu = get_object_or_404(CMSMenu, id=menuid)
    if request.method == 'POST':
        form = MoveNodeForm(menu, request.POST, valid_targets=CMSMenu.objects.all())
        if form.is_valid():
            try:
                menu = form.save()
            except InvalidMove:
                pass
    else:
        form = MoveNodeForm(menu)

    return render_to_response('testmovemenu.html',
                              {'form': form
                               ,'menu': menu
                               , 'page_info': _get_page_parameters() },
                              context_instance=RequestContext(request))
示例#12
0
    def move(self, request, object_id):
        '''Move Treeitem form'''
        model = self.model
        opts = model._meta

        treeitem = self.get_object(request, unquote(object_id).rstrip('/move'))
        if request.method == 'POST':
            form = MoveNodeForm(treeitem, request.POST)
            if form.is_valid():
                form.save()
                return HttpResponse('<script type="text/javascript">window.close();</script>')
                return HttpResponseRedirect(
                    reverse('admin:catalog_treeitem_change', args=[treeitem.id,])
                )
        else:
            form = MoveNodeForm(treeitem)

        fields = form.base_fields.keys()
        fieldsets = [
            (None, {'fields': fields}),
        ]
        
        context = context_admin_helper(self, request, opts, treeitem)
        context.update({
            'title': _('Move %s') % force_unicode(opts.verbose_name),
            'adminform': helpers.AdminForm(
                form,
                fieldsets,
                {},
                (),
                model_admin=self,
            ),
            'errors': helpers.AdminErrorList(form, []),
        })
        context_instance = template.RequestContext(request, current_app=self.admin_site.name)
        return render_to_response('admin/catalog/move_node_form.html',
            context, context_instance=context_instance)
示例#13
0
 def get_form(self, form_class=None):
     if self.request.method == 'POST':
         form = MoveNodeForm(Genre, self.request.POST)
         if form.is_valid():
             try:
                 category = form.save()
                 return HttpResponseRedirect(category.get_absolute_url())
             except InvalidMove:
                 pass
     else:
         '''
         from pprint import pprint
         import pdb; pdb.set_trace()
         TypeError: int() argument must be a string, a bytes-like object or a number, not 'DeferredAttribute'
         '''
         form = MoveNodeForm(Genre)
     return form
示例#14
0
def move_category(request, category_pk):
    category = get_object_or_404(PoiCategory, pk=category_pk)
    if request.method == 'POST':
        form = MoveNodeForm(category, request.POST)
        if form.is_valid():
            try:
                category = form.save()
                return HttpResponseRedirect(category.get_absolute_url())
            except InvalidMove:
                pass
    else:
        form = MoveNodeForm(category)

    return render('poi/poi-form.html', {
        'form': form,
        'category': category,
        'category_tree': PoiCategory.objects.all(),
    })
示例#15
0
def move_category(request, pk):
    category = get_object_or_404(models.PartCategory, pk=pk)
    if request.method == 'POST':
        form = MoveNodeForm(category, request.POST)
        if form.is_valid():
            try:
                category = form.save()
                return HttpResponseRedirect(category.get_absolute_url())
            except InvalidMove:
                pass
    else:
        form = MoveNodeForm(category)

    return render(
        request, 'PnbPartKeepr/test/footprint_form.html', {
            'form': form,
            'category': category,
            'category_tree': models.PartCategory.objects.all(),
        })
示例#16
0
def move_genre(request, genre_pk):
    genre = get_object_or_404(Genre, pk=genre_pk)

    if request.method == "POST":
        form = MoveNodeForm(genre, request.POST)

        if form.is_valid():
            try:
                genre = form.save()
                return render(request, "tutorial/genres.html",
                              {'genres': Genre.objects.all()})

            except InvalidMove:
                pass
    else:
        form = MoveNodeForm(genre)

    return render('tutorial/move_genre.html', {
        'form': form,
        'genre': genre,
        'genre_tree': Genre.objects.all()
    })
示例#17
0
def move_category(request, pk=None):
    category = get_object_or_404(Genre, pk=pk)
    if request.method == 'POST':
        form = MoveNodeForm(category, request.POST)
        if form.is_valid():
            try:
                category = form.save()
                return HttpResponseRedirect(reverse_lazy('genre:list'))
            except InvalidMove:
                pass
    else:
        form = MoveNodeForm(category)
    '''
    Be caution on the render. The given example from http://django-mptt.readthedocs.io/en/latest/forms.html#forms
    is outdated for long time
    '''
    return render(request,
                  'genre_move.html',
                  context={
                      'form': form,
                      'category': category,
                      'category_tree': Genre.objects.all(),
                  })