hdknr / djuploader

Data Uploader for Django
Other
0 stars 0 forks source link

==================== djuploader

Reference

https://pythonhosted.org/setuptools/setuptools.html https://docs.python.org/2.7/distutils/sourcedist.html#source-dist https://en.wikipedia.org/wiki/BSD_licenses#2-clause_license_.28.22Simplified_BSD_License.22_or_.22FreeBSD_License.22.29 https://en.wikipedia.org/wiki/Template:BSD

Exporting Model

  1. header_row and data_row in a QuerySet:

.. code-block:: python

from djuploader.queryset import UploadQuerySet
from django.utils.translation import ugettext_lazy as _

class ContactQuerySet(UploadQuerySet):
    def header_row(self, *args, **kwargs):
        ''' CSV Header '''
        return [_('Family Name'), _('First Name'), ]

    def data_row(self, instance):
        ''' CSV Data '''
        return [instance.family_name, instance.first_name, ]
  1. bind this QuerySet as a Manager:

.. code-block:: python

class Contact(AbstractProfile):
    # ....
    objects = querysets.ContactQuerySet.as_manager()
  1. FileResponse.export(model_class):

.. code-block:: python

from django.contrib.admin.views.decorators import staff_member_required
from djuploader.utils import FileResponse
from . import models

@staff_member_required
def export_contact(request):
    return FileResponse(filename="contact.csv").export(
        models.Contact.objects.all())

Importing Model

  1. Add uplaoded_signal to Model

.. code-block:: python

from django.dispatch import dispatcher

class Community(models.Model):
    uploaded_signal = dispatcher.Signal(providing_args=["instance", ])
  1. Add receiver

.. code-block:: python

from django.dispatch import receiver
from . import models

@receiver(models.Community.uploaded_signal)
def on_community_uploaded(instance, *args, **kwargs):

    for line, row, errors in instance.open(encoding='cp932'):
        if not errors:
            print "LINE=", line, " do something with dict", row
  1. Create admin link

.. code-block:: html

{% extends "admin/change_list.html" %}
{% load uploadertags %}

{% block object-tools-items %}
  {% get_upload_model opts.model as um %}       {# get UploadFile instance #}
  {{ block.super }}
  <li>
   <a href="https://github.com/hdknr/djuploader/blob/master/{% url 'admin:djuploader_uploadfile_add' %}?upload={{ um.id }}">
        {% trans 'Import' %}{% trans 'Community' %}</a>
  </li>
{% endblock %}