Django-默认窗体字段的值
当我准备通过UI创建一个模型实例时,我希望将一个字段(比如说“status”)默认为值“draft”。我试着在'init: **模型**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
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)