Я создал модель ниже, чтобы связать файл с другим типом объекта с именем Organization.
Функция _path () устанавливает путь к файлу {MEDIA_ROOT} / orgs / {НАИМЕНОВАНИЕ ОБЪЕДИНЕННОЙ ОРГАНИЗАЦИИ} / {FILENAME} . Он также заменяет все пробелы в пути подчеркиванием.
Поэтому, если я загружаю файл "Draft1.do c" и связываю его с организацией с именем "Моя средняя школа", полный путь должен быть uploads / orgs / My_High_School / Draft1.do c
Это в моем файле settings.py
MEDIA_ROOT ='uploads/'
Это в моем models.py
class OrgFile(models.Model):
def _path(instance, filename):
return F"orgs/{instance.org.name.replace(' ', '_')}/{filename}"
file = models.FileField(upload_to=_path)
org = models.ForeignKey(Organization, on_delete=models.DO_NOTHING)
def __str__(self):
return self.file.name.split('/')[-1]
Когда я использую Admin для загрузки и связывания файла, файл создается в правильном месте на диске и, кажется, имеет правильный путь и ассоциации в администраторе.
Однако, когда я перейдите к объекту файла в администраторе и щелкните путь, помеченный в настоящее время , часть «uploads /» не включена в путь (что может быть в порядке), но я также получаю предупреждение:
Файл организации с идентификатором «9 / change / orgs / My_High_School / Draft1.doc» не существует. Возможно, оно было удалено?
Понятия не имею, почему это происходит, так как все остальное выглядит нормально. Я предполагаю, что ссылка должна привести меня к файлу.
Мне также интересно, означает ли это, что есть еще одна невидимая проблема с настройкой, которая появится позже?