Свяжите существующий / созданный файл с моделью django (без переименования файла) FileField - PullRequest
0 голосов
/ 11 марта 2019

Я немного осмотрелся и нашел решения - но мой случай немного отличается.

Я создал файл календаря (.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 с исходным файлом без , чтобы она переименовала его / изменила внутренние компоненты?

...