django - 保存前更改表单实例 Django

标签 django django-models django-forms

我试图在保存之前更改表单的实例。我需要像这样在 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 是空的:

错误表:

  • 公司
  • 此字段为必填项。
  • 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/

    相关文章:

    python - 我可以通过一个 django 安装托管多个站点吗

    python - makemigrations 没有检测到新模型

    python - 在 django 模板中显示外键值

    Django 1.5 简单表单

    python - django-rest-framework、多表模型继承、ModelSerializers 和嵌套序列化程序

    python - 如何开发一个django->pylons文件上传工具?

    python - 如何获取 Django 模型中两个字段的乘积

    python - 如何在 Django 中使用内联表单集删除模型对象

    django-forms - 带有 Bootstrap : how to get help_text into a ModelForm? 的 django 脆形式和软盘形式

    Django 的 self.client.login(...) 在单元测试中不起作用