将现有/创建的文件与Django模型相关联(不重命名文件)FileField

时间:2019-03-11 14:56:14

标签: python django django-file-upload

我环顾四周并找到了解决方案-但是我的情况略有不同。

我创建了一个日历文件(.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模型链接到原始文件而无需对其重命名/更改内部结构?

0 个答案:

没有答案