如何使用Crispy表单使用会话变量填充输入文本?

时间:2015-07-27 01:30:20

标签: python django forms django-crispy-forms

我需要自动填写一个带有会话变量的字段(如果存在),或者如果不存在则将其留空。

但我不知道如何使用Crispy表单在Django中创建它。

这是观点:

def addclient(request):
    title = "Zona Clientes"
    form = NewClientForm(request.POST or None)

    if 'dni_cuit' in request.session:
        dni_cuit = request.session.get('dni_cuit')
        print("ESTÁ REGISTRADA LA SESSION DNI_CUIT"+dni_cuit)
        context = {
               "title": title,
               "form": form,
               "dni_cuit": dni_cuit
              }
    else:
        context = {
               "title": title,
               "form": form,
              }

    if form.is_valid():
        instance = form.save(commit=False)
        instance.save()
        del request.session['dni_cuit']

        # Las 2 lineas anteriores pueden obviarse si solo queremos guardar
        # los datos sin hacer nada con ellos con la siguiente linea
        # form.save()

        context = {
                   "title": "Cliente Añadido - Gracias",
        }

    return render(request, "clients/addclient.html", context)

这是表格:

# Formulario crear cliente
class NewClientForm(forms.ModelForm):

    class Meta:
        model = Client
        fields = ['dni_cuit',
                  'first_name',
                  'last_name',
                  'phone',
                  'email',
                  'address',
                  ]

    def clean_dni_cuit(self):
        dni_cuit = self.cleaned_data.get('dni_cuit')
        return dni_cuit

    def clean_first_name(self):
        first_name = self.cleaned_data.get('first_name')
        return first_name

    def clean_last_name(self):
        last_name = self.cleaned_data.get('last_name')
        return last_name

    def clean_phone(self):
        phone = self.cleaned_data.get('phone')
        return phone

    def clean_email(self):
        email = self.cleaned_data.get('email')
        return email

    def clean_address(self):
        address = self.cleaned_data.get('address')
        return address

任何人都可以告诉我如何设置dni_cuit存储在dni_cuit上的值的输入如果设置了吗?

1 个答案:

答案 0 :(得分:2)

您可以使用表格初始值

  

使用initial在运行时声明表单字段的初始值。   例如,您可能希望用。填写用户名字段   当前会话的用户名。

     

要完成此操作,请使用Form的初始参数。这个论点,   如果给定,应该是一个字典映射字段名称为initial   值。仅包括您要为其指定初始值的字段   值;没有必要在表单中包含每个字段。

因此,在您的情况下,您检查会话并确定是否需要。

if 'dni_cuit' in request.session:
    form = NewClientForm(request.POST or None, initial={'dni_cuit': request.session['dni_cuit']})
else:
    form = NewClientForm(request.POST or None)

Django docs

中详细了解相关信息