Вы всегда можете попробовать разделить ваш FileField
на FileModel
.
Взгляните на следующий псевдокод (как в python, основанном на памяти - сейчас я перешел к clojure).
models.py
class FileModel(models.Model):
file = models.FileField()
...
class ThingToWhichYoureAttaching(models.Model):
name = models.CharField()
attachments = models.ManyToManyField(FileModel)
...
forms.py
class FileForm(forms.ModelForm):
class Meta:
model=FileModel
class ThingForm(forms.ModelForm):
attachments = forms.MultipleChoiceField()#override the manytomany form field with style field of your choice.
class Meta:
model=ThingToWhichYoureAttaching
Когда они всплывают в окне с помощью кнопки PLUS, покажите FileForm
, но на главной странице оставьте ThingForm
без изменений. Вы также можете иметь начальный FileField на главной странице с ThingForm
для людей, у которых нет JavaScript. Обязательно обработайте FileForm
ДО ThingForm
, чтобы файл был доступен для вещи.
При обработке всплывающей формы вы можете использовать AJAX (я рекомендую jquery ) для отправки FileForm на сервер и возврата разметки для вставки файла в поле Attachments.