我有一个简单的模型,甚至更简单的模型表单,但是我无法弄清楚如何为表单字段设置初始值或自定义值。
我尝试使用form.cleaned_data['fieldname'] = value, initial={'field':value}, form.fields['field'].initial = value
,甚至像这样form.cleaned_data['status'] = Locked.STATUS[0][0]
对其进行索引,但我无法使其正常工作。
作为记录,我想使用模型中的选择字段。字段名称为“ STATUS”,我想在我的views.py中设置第一个值(“ odlozen”)用作表单字段值。因此,当此函数触发时,form.cleaned_data必须为“ odlozen”的STATUS值。
PS。不要介意我没有声明我的整个代码,因为这个问题不是必需的。谢谢!
让我以我的代码开头:
models.py
class Locked(models.Model):
STATUS = (
('odlozen', 'Odložen'), #this is the value
('u_procesu', 'U procesu'),
('ne_javlja_se', 'Ne javlja se'),
('zakazan', 'Zakazan'),
('odustao', 'Odustao'),
('default', 'Izaberite status.'),
)
...
status = models.CharField(max_length=50, choices=STATUS, blank=True) #I set blank=True for no reason, it can be False also.
...
class Meta:
verbose_name = 'Locked'
verbose_name_plural = 'Locked'
get_latest_by = 'locked_name'
def __str__(self):
return smart_str(self.locked_eluid)
这是我的forms.py:
class OppDetaljiForm(forms.ModelForm):
class Meta:
model = Locked
fields = [... ,'status', ...]
labels = {
...
'status': 'Status',
...
}
widgets = {
...
'status': forms.HiddenInput()
}
我的view.py:
def odlozi(request, pk):
opp_locked = Locked.objects.get(pk=pk)
form = OppDetaljiForm(instance=opp_locked)
...
if request.method == 'POST':
form = OppDetaljiForm(request.POST or None, instance=opp_locked)
if form.is_valid():
form.cleaned_data['status'] = 'odlozen' #?! As I said before, none of my ideas worked.
...
form.save()
...
return redirect('appname:url') # Dont mind me for not declaring my code, since it not necessary
context = {
'form': form,
...
}
return render(request, 'myhtmlpage.html', context)
这是HTML:
<div class="container" style="position: relative">
<form action="" method="POST">
{% csrf_token %}
<div class="form-row my-4">
<div class="form-group col-md-6 mb-0">
{{ form.status|as_crispy_field }}
</div>
...
# Other form fields
...
</div>
<a class="btn btn-light" href="{% url 'appname:url' %}">Back</a>
<button type="submit" class="btn btn-primary" style="float: right">Submit</button>
</form>
</div>
有几种方法:
ModelForm
中的初始值initial
字典传递给表单的初始化程序:form = OppDetaljiForm(instance=opp_locked, initial={'status': 'odlozen'})