Я не очень хорош с form
.
Джанго. Вот Order
из 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',
)
Пока я использую общий вид CreateView
для Order
модели в urls.py
url(
r'^orders/create/$',
CreateView.as_view(
model = Order,
template_name = 'doors/orders/create.html',
form_class = OrderCreateForm
),
name = 'orders_create'
),
В моем шаблоне у меня просто есть
{% extends "base.html" %}
{% block title %}Create order{% endblock %}
{% block content %}
{{ form }}
{% endblock %}
, и он создает частичную форму (без кнопки отправки), как это
Однако я хочу контролировать видимость полей creator
и approver
в зависимости от user.get_profile().user_type
.Если зарегистрированный пользователь user_type
не является менеджером, то creator
автоматически устанавливается как пользователь, а approver
также устанавливается автоматически.Если user_type
является менеджером, то этот пользователь может указать оба поля для разных пользователей.
Я также хочу иметь возможность называть фактические метки каждого поля.Например, измените Work type
на Category
.
В настоящее время я думаю, что единственный способ сделать это - сделать {% for field in form %}
внутри шаблона и запустить несколько строк, таких как {% if field.name == "creator" %}
.Есть ли более простой способ, чем набор контролируемых циклов и операторов if-then?