2017-04-23 57 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_ul上更改form.as_p。但我更喜歡在temaple中使用「手動渲染字段」。 – 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