How to show related items using DeleteView in Django?

后端 未结 2 1425
我在风中等你
我在风中等你 2020-11-29 05:03

I am doing a view to delete (using the generic view DeleteView from Django) an instance from a model, but it cascades and deletes instances from other models:



        
2条回答
  •  猫巷女王i
    2020-11-29 06:01

    I use a cutdown modifcation of get_deleted_objects() from the admin and use it to extend my context in get_context in the delete view:

    define somewhere

    from django.contrib.admin.utils import NestedObjects
    from django.utils.text import capfirst
    from django.utils.encoding import force_text
    
    def get_deleted_objects(objs): 
        collector = NestedObjects(using='default')
        collector.collect(objs)
        #
        def format_callback(obj):
            opts = obj._meta
            no_edit_link = '%s: %s' % (capfirst(opts.verbose_name),
                                       force_text(obj))
            return no_edit_link            
        #
        to_delete = collector.nested(format_callback)
        protected = [format_callback(obj) for obj in collector.protected]
        model_count = {model._meta.verbose_name_plural: len(objs) for model, objs in collector.model_objs.items()}
        #
        return to_delete, model_count, protected
    

    then in your views

    from somewhere import get_deleted_objects
    #
    class ExampleDelete(DeleteView):
        # ...
        def get_context_data(self, **kwargs):
            #
            context = super().get_context_data(**kwargs)
            #
            deletable_objects, model_count, protected = get_deleted_objects([self.object])
            #
            context['deletable_objects']=deletable_objects
            context['model_count']=dict(model_count).items()
            context['protected']=protected
            #
            return context
    

    now you can use them in your template

    
      {% for model_name, object_count in model_count %}
        
      {% endfor %}
    
    Name Amount
    {{ model_name|capfirst }} {{ object_count }}

      {{ deletable_objects|unordered_list }}

    Most is just copy/paste/edit/delete unwanted from django admin

提交回复
热议问题