龙空技术网

django框架的表单form的理解和用法-10

不易9093 41

前言:

而今同学们对“formcss模板”大约比较关怀,朋友们都需要了解一些“formcss模板”的相关文章。那么小编同时在网络上收集了一些对于“formcss模板””的相关内容,希望看官们能喜欢,你们快快来了解一下吧!

在以下示例中,我们需要为每个用户创建一个配置文件。配置文件包括用户的个人信息(如姓名和电子邮件地址)以及许多其他设置(如偏好和选项)。为了简化代码,这里只展示了一部分字段和选项。

首先,我们定义一个ProfileForm类,该类继承自Django的forms.ModelForm类:

from django import formsfrom .models import Profileclass ProfileForm(forms.ModelForm):    class Meta:        model = Profile        fields = ['name', 'email']    def __init__(self, *args, **kwargs):        super(ProfileForm, self).__init__(*args, **kwargs)        # 添加偏好选项        self.fields['color_scheme'] = forms.ChoiceField(            choices=Profile.COLOR_SCHEMES,            widget=forms.RadioSelect(attrs={'class': 'form-check-input'})        )        # 添加开关选项        self.fields['notifications'] = forms.BooleanField(            required=False,            widget=forms.CheckboxInput(attrs={'class': 'form-check-input'})        )

在上面的代码中,我们为模型Profile定义了一个表单,并添加了两个额外的字段:color_scheme和notifications。color_scheme是一个单选按钮组,它使用choices参数指定可用选项。notifications是一个复选框,它使用required=False参数表示此项不是必需的。

然后,我们在视图中使用此表单:

from django.shortcuts import render, redirectfrom .forms import ProfileFormfrom .models import Profiledef create_profile(request):    if request.method == 'POST':        form = ProfileForm(request.POST)        if form.is_valid():            profile = form.save(commit=False)            profile.user = request.user            profile.save()            return redirect('profile_list')    else:        form = ProfileForm()    return render(request, 'create_profile.html', {'form': form})

在上面的代码中,我们首先检查请求方法是否为POST。如果是,则创建一个ProfileForm实例并验证其数据。如果表单有效,则我们将提交用户的个人信息和选项(颜色方案和通知偏好)保存到数据库中,并将用户重定向到配置文件列表页面。如果请求方法为GET,则我们返回一个带有空表单的页面以供填写。

最后,在HTML模板中,我们可以动态呈现表单以包含额外的字段:

<form method="post">  {% csrf_token %}  <div class="form-group">    {{ form.name.label_tag }}    {{ form.name }}  </div>  <div class="form-group">    {{ form.email.label_tag }}    {{ form.email }}  </div>  <div class="form-group">    <label>Color Scheme:</label><br>    {% for radio in form.color_scheme %}      <div class="form-check">        {{ radio.tag }}        {{ radio.choice_label }}      </div>    {% endfor %}  </div>  <div class="form-group">    <div class="form-check">      {{ form.notifications }}      <label class="form-check-label">Receive notifications</label>    </div>  </div>  <button type="submit" class="btn btn-primary">Save</button></form>

在上面的代码中,我们首先使用{{ form.name }}和{{ form.email }}呈现用户的个人信息字段。然后,我们使用一个循环遍历所有单选按钮,并为每个单选按钮添加一个包含标签和输入的<div>元素。最后,我们使用{{ form.notifications }}呈现复选框,并为其添加一个标签。

Bootstrap表单样式

如果您使用Bootstrap作为CSS框架,则可以使用Django Bootstrap Forms库来轻松地将Bootstrap样式应用于您的表单。

首先,请确保安装了Django Bootstrap Forms库。然后,在HTML模板中,您可以使用以下代码来呈现带有Bootstrap样式的表单:

{% load bootstrap4 %}<form method="post">  {% csrf_token %}  <div class="form-group">    {{ form.name|as_crispy_field }}  </div>  <div class="form-group">    {{ form.email|as_crispy_field }}  </div>  <div class="form-group">    {{ form.message|as_crispy_field }}  </div>  <button type="submit" class="btn btn-primary">Submit</button></form>

在上面的代码中,我们首先使用{% load bootstrap4 %}标签加载Bootstrap模板标记。然后,我们使用as_crispy_field过滤器将每个表单字段转换为具有Bootstrap样式的HTML。最后,我们添加一个提交按钮。

此外,您还可以使用以下代码将整个表单呈现为Bootstrap样式的水平表单:

{% load bootstrap4 %}<form method="post" class="form-horizontal">  {% csrf_token %}  <div class="form-group">    <label class="col-sm-2 control-label">{{ form.name.label }}</label>    <div class="col-sm-10">      {{ form.name|as_crispy_field }}    </div>  </div>  <div class="form-group">    <label class="col-sm-2 control-label">{{ form.email.label }}</label>    <div class="col-sm-10">      {{ form.email|as_crispy_field }}    </div>  </div>  <div class="form-group">    <label class="col-sm-2 control-label">{{ form.message.label }}</label>    <div class="col-sm-10">      {{ form.message|as_crispy_field }}    </div>  </div>  <div class="form-group">    <div class="col-sm-offset-2 col-sm-10">      <button type="submit" class="btn btn-primary">Submit</button>    </div>  </div></form>

在上面的代码中,我们为表单添加了form-horizontal类,并使用col-sm-*类调整每个字段和其标签的样式。

好的,下面是一个详细的Django表单字段定义示例,包括字符串、整数、浮点数、日期和时间字段。

from django import formsfrom django.forms import ModelFormfrom .models import Product, Orderclass ProductForm(ModelForm):    name = forms.CharField(        max_length=100,        widget=forms.TextInput(attrs={'class': 'form-control'})    )    description = forms.CharField(        widget=forms.Textarea(attrs={'class': 'form-control', 'rows': 3})    )    price = forms.DecimalField(        max_digits=8, decimal_places=2,        widget=forms.NumberInput(attrs={'class': 'form-control'})    )    quantity = forms.IntegerField(        widget=forms.NumberInput(attrs={'class': 'form-control'})    )    class Meta:        model = Product        fields = ['name', 'description', 'price', 'quantity']class OrderForm(ModelForm):    product = forms.ModelChoiceField(queryset=Product.objects.all(), empty_label=None)    order_date = forms.DateField(        widget=forms.DateInput(attrs={'type': 'date', 'class': 'form-control'})    )    order_time = forms.TimeField(        widget=forms.TimeInput(attrs={'type': 'time', 'class': 'form-control'})    )    class Meta:        model = Order        fields = ['product', 'order_date', 'order_time']

在上面的代码中,我们首先导入必要的模块并定义了ProductForm和OrderForm两个表单。在ProductForm中,我们添加了四个字段:name、description、price和quantity。对于每个字段,我们都使用不同的小部件来呈现其内容。

对于字符串字段name,我们使用forms.CharField,并指定最大长度为100。在呈现表单时,我们将该字段转换为一个带有form-control类的文本输入框。

对于文本字段description,我们使用forms.CharField,并将其转换为带有form-control类和3行高的多行文本框。

对于价格字段price,我们使用forms.DecimalField,并将其转换为带有form-control类的数字输入框。

对于数量字段quantity,我们使用forms.IntegerField,并将其转换为带有form-control类的数字输入框。

在OrderForm中,我们添加了三个字段:product、order_date和order_time。product是一个外键字段,它使用forms.ModelChoiceField并指定所有可用产品的查询集。

对于日期字段order_date,我们使用forms.DateField,并将其转换为带有form-control类的日期选择器。

对于时间字段order_time,我们使用forms.TimeField,并将其转换为带有form-control类的时间选择器。

注意,对于日期和时间字段,我们需要为其小部件指定type属性,以便正确呈现浏览器原生日期和时间选择器。

标签: #formcss模板 #css表单样式 #css表单模板