Djangoのform
はあまりよくありません。ここでジェネリックビューを使用してフォームのビューをカスタマイズする方法DjangoのCreateView
は、これまでのところ、私は私のテンプレートでurls.py
url(
r'^orders/create/$',
CreateView.as_view(
model = Order,
template_name = 'doors/orders/create.html',
form_class = OrderCreateForm
),
name = 'orders_create'
),
にOrder
モデルの汎用ビューCreateView
を使用していますmodels.py
class Order(models.Model) :
def __unicode__(self) :
return unicode(self.pk)
def get_absolute_url(self) :
return reverse('orders_detail', args = [ self.pk ])
STATUS_CHOICES = (
('p', 'pending' ),
('a', 'approved'),
('r', 'rejected'),
('c', 'closed' ),
('l', 'locked' ),
)
WORK_TYPE_CHOICES = (
('hc', 'Heating and cooling'),
('el', 'Electrical' ),
('pl', 'Plumbing' ),
('ap', 'Appliances' ),
('pe', 'Pests' ),
('ex', 'Exterior' ),
('in', 'Interior' ),
('sa', 'Safety' ),
('ot', 'Others' ),
)
creator = models.ForeignKey(User, related_name = 'creator')
approver = models.ForeignKey(User, related_name = 'approver')
comments = models.TextField(blank = True)
status = models.CharField(max_length = 1, choices = STATUS_CHOICES, default = 'p')
quote = models.DecimalField(max_digits = 8, decimal_places = 2, null = True, blank = True)
payment = models.DecimalField(max_digits = 8, decimal_places = 2, null = True, blank = True)
work_type = models.CharField(max_length = 2, choices = WORK_TYPE_CHOICES)
vendor = models.ForeignKey(Vendor, null = True, blank = True)
created = models.DateTimeField(auto_now_add = True)
modified = models.DateTimeField(auto_now = True)
class OrderCreateForm(ModelForm) :
class Meta :
model = Order
fields = (
'creator',
'approver',
'comments',
'work_type',
)
からOrder
ですが、私は単に持っている
{% extends "base.html" %}
{% block title %}Create order{% endblock %}
{% block content %}
{{ form }}
{% endblock %}
それは、この
のように(無送信ボタン付き)部分のフォームを作成するには、しかし、私はuser.get_profile().user_type
に応じてcreator
とapprover
フィールドの可視性を制御したいです。ログインしたユーザーのuser_type
がマネージャーでない場合、creator
は自動的にユーザーとして設定され、approver
も自動的に設定されます。 user_type
がマネージャーの場合、そのユーザーは両方のフィールドを異なるユーザーに指定できます。
また、各フィールドの実際のラベルに名前を付けることもできます。たとえば、Work type
をCategory
に変更します。
現在、私はこれを行う唯一の方法は{% for field in form %}
をテンプレート内に入れて、{% if field.name == "creator" %}
のような一連の行を実行することだと考えています。制御ループとif-thenステートメントの束より簡単な方法はありますか?
ありがとうございます。あなたが参照していた "CBV"は何ですか?一般的なビュー? – hobbes3
@ hobbes3関数ベースのクラスベースのビューです。 – DrTyrsa
あなたは、私は自分のビューを 'views.py'で作成することを提案していますか? – hobbes3