Использование django filer вне админки (или альтернативной библиотеки)

Django filer — отличный инструмент для управления файлами, он обнаруживает дубликаты и упорядочивает файлы на основе их хэшей в папках, имеет отличный пользовательский интерфейс для управления файлами и папками и обрабатывает историю файлов и разрешения.

Я прочитал часть исходного кода и понял, что он широко использует функции администрирования django в коде и шаблонах; Есть ли способ использовать эти функции для нештатных сотрудников, которые вошли в систему? Дать им инструменты для загрузки и управления собственными файлами и папками в их личной области загрузки (не изобретая велосипед)?

Если нет простого пути, то какие есть альтернативы, и вы предлагаете реализовать такую ​​функциональность с минимальными изменениями в коде?


person Mohammad Jafar Mashhadi    schedule 30.09.2016    source источник


Ответы (1)


Согласно этот django-filer не должен работать снаружи администратора, но с некоторым «клеем» я смог заставить загрузки работать в «нормальном» шаблоне. Вот часть моего кода:

    # forms.py

    class PollModelForm(forms.ModelForm):
        uploaded_image = forms.ImageField(required=False)

        class Meta:
            model = Poll
            fields = ['uploaded_image']

    # views.py
    # I used django-extra-views but you can use a normal cbv
class PollCreateView(LoginRequiredMixin, CreateWithInlinesView):
    model = Poll
    form_class = PollModelForm
    template_name = 'polls/poll_form.html'
    success_url = reverse_lazy('polls:poll-list')
    inlines = [ChoiceInline]

    # Powered by django-extra-views for the inlines so a bit different
    @transaction.atomic
    def forms_valid(self, form, inlines):
        # It's more secure this way.
        form.instance.user = self.request.user

        uploaded_file = form.cleaned_data['uploaded_image']
        image = Image.objects.create(
            name=str(uploaded_file), is_public=True, file=uploaded_file,
            description='Poll Image', owner=self.request.user
        )
        form.instance.image = image

        log.info('Poll image uploaded'.format(**locals()))

        return super(PollCreateView, self).forms_valid(form, inlines)

    # HTML
                              <div class="form-group">
                                <input type="file" name="uploaded_image" id="id_uploaded_image">
                                <p class="help-block">Upload image here.</p>
                              </div>
person psychok7    schedule 12.04.2017