Django - проблема с сохранением данных в Createview с ModelForm в базу данных не по умолчанию

У меня возникла проблема с сохранением данных в базу данных не по умолчанию.

В models.py у меня есть:

grid_fs_storage = GridFSStorage(collection='tab_userinquiries', base_url='mydomain.com/userinquiries/',database='mongo_instance')

class DocsUserInquiry(models.Model):
    query_pk = models.CharField(blank=False, null=False, unique=True, max_length=150, primary_key=True)  # auto - calculated
    query_file_md5 = models.CharField(blank=False, null=True, unique=False, max_length=200)  # auto - calculated
    query_file = models.FileField(upload_to='userinquiries',storage=grid_fs_storage,null=True)  # auto from form

В views.py:

class UploadInquiryFileView(CreateView,LoginRequiredMixin):
    model=DocsUserInquiry
    template_name ='new_inquiry.html'
    success_message = "You've added your new Token successfully"
    form_class = UploadInquiryFileForm
    def post(self, request, *args, **kwargs):
        form = self.form_class(request.POST, request.FILES)
        if form.is_valid():
            file_name = request.FILES['query_file'].name
            print(f'file...{file_name}')
            q_pk = random_id()
            file_in = self.request.FILES.get('query_file')
            f_md5 = calculate_md5(file_in)            
            form.instance.query_pk = q_pk
            form.instance.query_file_md5 = f_md5
            form.save()
            return HttpResponse(self.success_message)

Проблема в том, что каждый раз при отправке формы я получаю

Exception Type: TypeError
Exception Value:    database must be an instance of Database

Я попробовал добавить это к методу post:

instance = form.save(commit=False)
instance.save(using='mongo_instance')

но ошибка та же самая.

Есть идеи, как решить эту проблему?

ПРИМЕЧАНИЕ: Эта проблема связана только с modelform или когда я использую пользовательский список полей в представлении. Когда я использую CreateView без ModelForm, но с fields = 'all' и дополнительно с логикой, передаваемой в метод form_valid представления вместо post, все работает нормально. Затем файлы добавляются в мою mongo db.

После некоторых тестов я понял, что проблема в gridfs. После внесения небольших изменений в FileField я получил ожидаемый результат.

Мне пришлось удалить upload_to и storage из этого поля в models.py. Это сохраняет данные из моей формы в mongo, но без самого файла. Для этого мне пришлось добавить в post метод моего CreateView подключение к mongo через MongoClient и сохранить файл таким отдельным способом.

Совершенно не понимаю, в чем проблема с gridfs хранилищем, указываемым непосредственно в FileField модели.

Вернуться на верх