Django ModelForm初始或自定义字段值

问题描述 投票:0回答:1

我有一个简单的模型,甚至更简单的模型表单,但是我无法弄清楚如何为表单字段设置初始值或自定义值。

我尝试使用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>
python django django-models django-forms django-views
1个回答
0
投票

有几种方法:

  • 如果在模型中设置了默认值,则将其用作相应ModelForm中的初始值
  • 或者只是将initial字典传递给表单的初始化程序:
form = OppDetaljiForm(instance=opp_locked, initial={'status': 'odlozen'})
© www.soinside.com 2019 - 2024. All rights reserved.