【问题标题】:Checkboxes and Radio buttons in Django ModelFormDjango ModelForm 中的复选框和单选按钮
【发布时间】:2017-09-20 00:28:07
【问题描述】:

欢迎朋友,

我是 Django 的新手。我需要你的帮助。认真的。

我想在我的表单中添加复选框和单选按钮。

任何帮助将不胜感激。

models.py

from django.db import models
from shop.models import Product

class Order(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    email = models.EmailField()
    address = models.CharField(max_length=250)
    postal_code = models.CharField(max_length=20)
    city = models.CharField(max_length=100)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    paid = models.BooleanField(default=False)

    class Meta:
        ordering = ('-created',)

    def __str__(self):
        return 'Order {}'.format(self.id)

    def get_total_cost(self):
        return sum(item.get_cost() for item in self.items.all())

forms.py

from django import forms
from .models import Order

class OrderCreateForm(forms.ModelForm):
    class Meta:
        model = Order
        fields = ['first_name', 'last_name', 'email', 'address', 'postal_code', 'city']

create.html

{% extends "shop/base.html" %}

{% block title %}
    Checkout
{% endblock %}

{% block content %}
    <h1>Checkout</h1>

    <form action="." method="post" class="order-form">
        {{ form.as_p }}
        <p><input type="submit" value="Place order"></p>
        {% csrf_token %}
    </form>
{% endblock %}

欢迎任何建议。请帮助。

更新

如何添加选择选项?

【问题讨论】:

    标签: django python-3.x django-models django-forms


    【解决方案1】:

    表单将使用您在模型中定义的字段类型呈现:

    • BooleanField 呈现为复选框,按您的情况付费。
    • ChoiceField 可以通过适当的小部件呈现为单选按钮。

    您可以在 OrderCreateForm 类中重新定义小部件:

    CHOICES = [('option1','label 1'), ('option2','label 2')] some_field = forms.ChoiceField(choices=CHOICES,widget=forms.RadioSelect())

    【讨论】:

      【解决方案2】:

      你可以这样做

      CHOICES=[('item1','item 1'),
               ('item2','item 2')]
      class OrderCreateForm(forms.ModelForm):
          postal_code = forms.ChoiceField(choices=CHOICES, widget=forms.RadioSelect())
          ....
      class Meta:
          model = Order
          fields = ['first_name', 'last_name', 'email', 'address', 'postal_code', 'city']
      

      同样,你也可以为其他领域做

      对于复选框,您可以将其定义为 BooleanFileld 并且可以使用

      {{ form.paid }}
      

      在你的模板中。

      【讨论】:

      • 你的想法不错。我只需要在 form.as_ul 上更改 form.as_p。但我更喜欢在模板中使用“手动渲染字段”。
      猜你喜欢
      • 2016-09-11
      • 2011-10-18
      • 2016-01-15
      • 2023-04-06
      • 1970-01-01
      • 2011-11-15
      • 1970-01-01
      • 1970-01-01
      • 2012-10-16
      相关资源
      最近更新 更多