2017-04-23 66 views
1

ようこそ、Django ModelFormのチェックボックスとラジオボタン

私は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

​​

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 %} 

任意の提案は、AR歓迎です。助けてください。

UPDATE

どのように選択するオプションを追加するには?

答えて

3

あなたは同様にこの

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 }} 

あなたのテンプレートです。

+0

あなたの考えは良いです。 form.as_pでform.as_pを変更するだけでした。しかし、私はテンペラで「レンダリングフィールドを手動で」使用することを好みます。 – Kuba

+0

あなたが私の答えを受け入れるのを助けたら助けてください。 – badiya

1

フォームには、モデルで定義のフィールドタイプでレンダリングされます。

  • のBooleanFieldは、あなたのケースで支払ったチェックボックスとしてレンダリングされます。
  • ChoiceFieldは、適切なウィジェットでラジオボタンとしてレンダリングできます。

あなたはクラスOrderCreateFormにウィジェットを再定義することができます。

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

+0

非常にクールです。ありがとうございました:) – Kuba

関連する問題