我试图在保存之前更改表单的实例。我需要像这样在 View 中设置某些信息:
class UploadedFile(models.Model):
file = models.FileField(storage=s3store, upload_to=custom_upload_to)
slug = models.SlugField(max_length=50, blank=True)
bucket = models.ForeignKey(S3Bucket, blank=False)
uploaded_by = models.ForeignKey(User, related_name='uploaded_by', blank=False)
company = models.ForeignKey(Company, blank=False)
--
class UploadForm(ModelForm):
class Meta:
model = UploadedFile
--
form = UploadForm(request.POST, request.FILES)
form.instance.company_id = r_user.company.id
form.instance.uploaded_by_id = r_user.id
form.instance.bucket_id = r_user.company.s3_bucket_id
if form.is_valid():
form_object = form.save()
现在,我知道表单无效,因为 company/uploaded/bucket 是空的:
错误表:
但我确实设置了它们!我是否需要让它们空白=True,然后保存(commit=false),更改它们,然后重新保存?如果是,为什么会这样?我确实更改了表格....
最佳答案
试试这个:
data = request.POST.copy()
data['company_id'] = r_user.company.id
data['uploaded_by_id'] = r_user.id
data['bucket_id'] = r_user.company.s3_bucket_id
form = UploadForm(data, request.FILES)
if form.is_valid():
form_object = form.save()
通过这种方式,您可以在创建表单之前设置数据。
关于django - 保存前更改表单实例 Django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10723054/