繁体   English   中英

Django-默认表单字段的值

[英]Django - Defaulting a Form Field's Value

当我要通过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)

形成

class ForecastConfigurationCreateForm(forms.ModelForm):

  class Meta:
      model = ForecastConfiguration
      exclude = ['uuid', 'hierarchy_nodes']

  def __init__(self, *args, **kwargs):
      super().__init__(*args, **kwargs)

      # default status
      self.fields['status'] = ModelChoiceField(queryset=ObjectStatus.get_object_status_list(self, is_form=True))

      # status is defaulted when created; will get updated by planning element status
      self.fields['status'].widget.attrs['disabled'] = True

效果很好:该值为默认值。 但是,当我提交表单时,出现验证错误,指出该字段不能为空,并且在表单中,该值为空。

我也尝试在视图中执行此操作(结果相同):

视图

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})

编辑

这是加载时默认使用status字段的方式: 负载

保存后,该值仍然存在,但是该表单抱怨: 在此处输入图片说明

使用readonly作为属性会使字段变为只读,但仍可以对其进行编辑: 在此处输入图片说明

在视图中实例化表单时,需要添加初始值。 像这样

form = ArticleForm(initial={'headline': 'Initial headline'}, instance=article)

此处检查Django文档是否有模型表格。

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM