Я немного осмотрелся и нашел решения - но мой случай немного отличается.
Я создал файл календаря (.ics), и он отлично работает. Файл .ics создан, действителен и прекрасно работает.
Когда я пытаюсь сохранить его в модели django - django создает дубликат файла со случайной строкой, добавляемой в конец имени файла. При этом он изменяет окончания строк внутри файла, что делает файл .ics более недействительным в соответствии с RFC 5545.
Моя модель выглядит так:
class CourseDetail(models.Model):
SESSIONS = (
('AM', 'AM'),
('PM', 'PM'),
('AM/PM', 'AM/PM'),
)
course = models.ForeignKey(Course, on_delete=models.PROTECT)
location = models.ForeignKey(Location, on_delete=models.PROTECT)
session = models.CharField(max_length=5, choices=SESSIONS)
seat_count = models.IntegerField()
limit_registrations = models.BooleanField(default=False)
ics_file = models.FileField(
upload_to='registrations/uploads/calendars/',
validators=[FileExtensionValidator(['ics'])],
null=True,
blank=True
)
Здесь у меня есть бит, где я создаю файл и ассоциирую с моделью:
...created calendar and added events...
filename = f'{course_detail.session}-{location}-{course}.ics'
# e.g. AM-location1-fishing.ics
db_course_detail = CourseDetail.objects.get(id=course_detail.id)
calendar = open(
os.path.join(
'registrations/uploads/calendars/',
filename
),
'a+b'
)
# here we save the file to the model - where it gets renamed by django
db_course_detail.ics_file.save(filename, File(calendar))
db_course_detail.save()
# finish writing out and closing the file
calendar.write(c.to_ical())
calendar.close()
Я получаю 2 файла:
Файл 1 - my-file.ics
: назван соответствующим образом и работает должным образом при добавлении в календарь.
Файл 2 - my-file-38fjcea83.ics
: создан django со строкой, добавленной к имени, и файл больше не распознается календарем как действительный.
Есть ли лучший способ сделать это, чтобы я мог просто связать модель django с исходным файлом без , чтобы она переименовала его / изменила внутренние компоненты?