Django 将文件保存到不同的模型
Django saving file to different model
我有一个用于提交文件的简单表单,效果很好。我已经将文件从一个字段移出到它自己的 table 中,现在我真的很挣扎,因为我需要将文件添加到额外的 table 并以 table 的形式保存正确的外键=16=]。我在 save() 中尝试了各种片段,在视图中抓取文件并将文件添加为额外字段,但没有任何效果。
相当明显的错误是:
"Cannot assign InMemoryUploadedFile: Resource.file must be a File
instance"
class File(models.Model):
filename = models.CharField('Filename', max_length=200)
file = models.FileField()
mimetype = models.CharField('Mimetype', max_length=200)
pub_date = models.DateTimeField('date published', auto_now_add=True, blank=True)
def __str__(self):
return self.filename
class Resource(models.Model):
list_display = ('title', 'approved')
def __str__(self):
return str(self.title)
title = models.CharField('Title', max_length=200)
description = models.TextField('Description', null=True)
file = models.ForeignKey(File)
... cut for brevity
class ResourceForm(forms.ModelForm):
class Meta:
model = Resource
问题是您将文件分配到外键字段。你需要先实例化File
对象,然后设置到Resource
对象。
file = File(filename="test", file=temp_data, mimetype='pdf')
file.save()
resource.file = file
resource.save()
我有一个用于提交文件的简单表单,效果很好。我已经将文件从一个字段移出到它自己的 table 中,现在我真的很挣扎,因为我需要将文件添加到额外的 table 并以 table 的形式保存正确的外键=16=]。我在 save() 中尝试了各种片段,在视图中抓取文件并将文件添加为额外字段,但没有任何效果。
相当明显的错误是:
"Cannot assign InMemoryUploadedFile: Resource.file must be a File instance"
class File(models.Model):
filename = models.CharField('Filename', max_length=200)
file = models.FileField()
mimetype = models.CharField('Mimetype', max_length=200)
pub_date = models.DateTimeField('date published', auto_now_add=True, blank=True)
def __str__(self):
return self.filename
class Resource(models.Model):
list_display = ('title', 'approved')
def __str__(self):
return str(self.title)
title = models.CharField('Title', max_length=200)
description = models.TextField('Description', null=True)
file = models.ForeignKey(File)
... cut for brevity
class ResourceForm(forms.ModelForm):
class Meta:
model = Resource
问题是您将文件分配到外键字段。你需要先实例化File
对象,然后设置到Resource
对象。
file = File(filename="test", file=temp_data, mimetype='pdf')
file.save()
resource.file = file
resource.save()