Django-默认窗体字段的值

Django-默认窗体字段的值,django,django-forms,django-views,Django,Django Forms,Django Views,当我准备通过UI创建一个模型实例时,我希望将一个字段(比如说“status”)默认为值“draft”。我试着在'init: **模型** class ForecastConfiguration(Control): uuid = kp.ObjectIDField() name = kp.ObjectNameField() description = kp.ObjectDescriptionField() status = models.ForeignKey(Status, blan

当我准备通过UI创建一个模型实例时,我希望将一个字段(比如说“status”)默认为值“draft”。我试着在'init: **模型**

class ForecastConfiguration(Control):
  uuid = kp.ObjectIDField()
  name = kp.ObjectNameField()
  description = kp.ObjectDescriptionField()
  status = models.ForeignKey(Status, blank=False, null=False, editable=True, on_delete=models.PROTECT)
形式

这很好:该值是默认值。但是,当我提交表单时,我得到一个验证错误,说明此字段不能为空,并且在表单中,值为空

我尝试在视图中执行此操作,也得到了相同的结果:

看法

编辑

这是加载时默认状态字段的方式:

保存后,值仍然存在,但表单会抱怨:

将readonly用作属性会使字段成为只读字段,但仍可对其进行编辑:
在视图中实例化表单时,需要添加初始值。诸如此类

form = ArticleForm(initial={'headline': 'Initial headline'}, instance=article)
检查django文档中的模型表单是否正确


希望这有帮助

渲染页面怎么样?你看到默认填写的表单字段了吗?@VaibhavVishal-我刚刚编辑了我的问题。希望有帮助!您是否尝试过像这样将值设置为对象的pk,form=ForecastConfigurationCreateForminitial={'status':status\u id.id},因为您的status\u id是一个对象,而实际值是一个int,例如,它是您的禁用字段,给您带来了问题:s。由于某种原因禁用状态字段时,不会在请求中发送该字段。当它被移除时,对我来说效果很好。您需要将字段设置为只读,而不是禁用。一个简单的搜索将告诉您如何在表单HTML中设置只读。我明白了,您的另一个选择是将select保持为禁用状态,并为状态添加一个隐藏字段,其中包含您需要的值。通过这种方式,您的选择不可单击,您的隐藏值将被发送。这同样是一个html属性,与django无关。请对任何有用的评论进行投票:
class ForecastConfigurationCreateView(CreateView):
  model = ForecastConfiguration
  form_class = ForecastConfigurationCreateForm
  template_name = 'frontend/base/planning_create.html'
  object = None
  # success_url = ''

   def get(self, request, *args, **kwargs):

    # default status to 'Draft'
    status_id = Status.objects.get(name=constant.status['draft']).uuid
    form = ForecastConfigurationCreateForm(initial={'status': status_id})

    member_formset = MemberFormSet()


    return render(request, self.template_name, {'form': form, 'member_formset': member_formset})
form = ArticleForm(initial={'headline': 'Initial headline'}, instance=article)