Package: django-submitify
Multi-format submission accepting platform.Quick startAdd “submitify” to your INSTALLED_APPS setting like this:INSTALLED_APPS = [
    ...
    'submitify',
]Ensure that you havedjango.contrib.authadded as an application as well.Include the submitify URLconf in your project urls.py like this:url(r'^submitify/', include('submitify.urls')),Runpython manage.py migrateto create the submitify models.Start the development server.Visithttp://127.0.0.1:8000/submitify/to see the app.Notes for the pluggable applicationThe standalone application is basically ready to use as one would normally run
a Django app, but the pluggable application has a few more things to note.Submitify hooks into the Django permissions system.  Creating a new
call-for-submissions requires thesubmitify.add_callpermission, so
publishers should be added to a group with that permission.Submitify is designed, loosely, for a site usingBootstrap, so elements are classed as such, but this is
designed to not be a hard requirement.  To that end, some styles are defined within the templates.Applications must implement the ability to add users as readers/invite users
as writers.  A form for doing such is available atsubmitify.forms.InviteForm.  The view should look something like this:def view_user(request, username=None):
    user = get_object_or_404(User, username=username)
    ...
    invite_calls_reading = []
    invite_calls_writing = []
    if request.user.is_authenticated and request.user != user:
        invite_calls_reading = request.user.submitify_calls_editing.filter(
              ~Q(readers__in=[user]),
            status__in=[
                Call.NOT_OPEN_YET,
                Call.OPEN
              ])
        invite_calls_writing = request.user.submitify_calls_reading.filter(
                status__in=[
                Call.NOT_OPEN_YET,
                Call.OPEN,
              ],
            invite_only=True)
    invite_reader_form = InviteForm(initial={
          'user': user,
      })
    invite_reader_form.fields['calls'].queryset = invite_calls_reading
    invite_writer_form = InviteForm(initial={
          'user': user,
      })
    invite_writer_form.fields['calls'].queryset = invite_calls_writing
    return render(request, 'view_profile.html', {
          ...
          'invite_reader_form': (invite_reader_form if
                               len(invite_calls_reading) > 0 else None),
          'invite_writer_form': (invite_writer_form if
                               len(invite_calls_writing) > 0 else None),
      })The template should look something like:{% if invite_reader_form %}
    <form method="post" action="{% url 'submitify:invite_reader' %}">
        {% csrf_token %}
        {{ invite_reader_form.user }}
        <div class="form-group">
            <label for="id_calls">Invite user as a reader to...</label>
            {{ invite_reader_form.calls }}
        </div>
    </form>
{% endif %}
{% if invite_writer_form %}
    <form method="post" action="{% url 'submitify:invite_writer' %}">
        {% csrf_token %}
        {{ invite_writer_form.user }}
        <div class="form-group">
            <label for="id_calls">Invite user as a writer to...</label>
            {{ invite_writer_form.calls }}
        </div>
    </form>
{% endif %}See the standalone application for more information.Further informationSource, issues, and further information:GitHubAuthorThe OpenFurry Contributors