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

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

    通过这种方式,您可以在创建表单之前设置数据。

    https://stackoverflow.com/questions/10723054/

    相关文章:

    git - 为什么提交后文件保留在索引中?

    hibernate - 如何定义两个抽象类之间的 ManyToOne 关系

    wordpress - 如何在 Wordpress 中回显 100% 的 the_post?

    authentication - 你将如何实现 "view site as a different

    oracle - 使用 sqlloader 将 clob 列添加到 Oracle 数据库

    sql - 在所有列中搜索并找到一个字符串值

    regex - 如何使用正则表达式查找字符串中出现的相同后续字符?

    r - 如何处理每次有多个点的时间序列(在 R 中)?

    asp.net - 读取已在 ASP.NET httpmodule 中设置的经典 ASP 中的服务器

    xcode - 如何在 Xcode 分析和存档构建中设置 DEBUG 和 NDEBUG 宏?