我环顾四周并找到了解决方案-但是我的情况略有不同。
我创建了一个日历文件(.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模型链接到原始文件而无需对其重命名/更改内部结构?