Использование django filer вне административной области (или альтернативной библиотеки)
Django filer - это замечательный инструмент для управления файлами, он обнаруживает дубликаты и организует файлы на основе их хэшей в папках, имеет отличный пользовательский интерфейс для управления файлами и папками, а также обрабатывает историю файлов и разрешения.
Я прочитал часть исходного кода и понял, что он широко использует функции администратора django в коде и в шаблонах; Есть ли способ использовать эти функции для тех, кто не является сотрудником, которые вошли в систему? Чтобы дать им инструменты для загрузки и управления их собственными файлами и папками в их личной области загрузки (не изобретая колесо)?
Если нет простого пути, какие есть альтернативы, и вы предлагаете предоставить такую функциональность с минимальными изменениями в коде?
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>