2014-01-21 47 views
0

我有有,如姓名电话等是更多的私人像SSN ID tax_id等一些一般性的领域和一些领域模型用户模型所以它是这样附加字段与独立的形式

class Customer(models.Model): 

    #general fields 
    #more private staff fields 

我希望有一种形式来创建一个新的客户,但我希望他们在不同的选项卡(以及我的雇主确实需要)。最佳做法是什么?有不同的模式如此不同的形式?

class Customer(models.Models): 
    #general fields 

class PrivateFields(models.Model): 
    #private fields 
    customer = models.OneToOneField(Customer) 

上述方法需要在一个模板中使用两种不同的表单。如果我想一种形式(第一种方法一个模型)将类似的东西的立场,还是会遇到问题: 我使用bootstrap3:

<ul class="nav nav-tabs" id="myTab"> 
    <li><a href="#general-info">General</a></li> 
    <li><a href="#private-details">Private</a></li> 
</ul> 

<form class="inline"> 

    <div class="tab-content"> 
     <div class="tab-pane active" id="general-info"> 
      <div class="row"> 
       <div class="form-group col-md-6"> 
        <label for="text">Home</label> 
        <input type="text" id="text" class="form-control input-sm" placeholder="Small"> 
       </div> 
      </div> 
     </div> 
     <div class="tab-pane" id="private-details"> 
      <div class="row"> 
       <div class="form-group col-md-6"> 
        <label for="profile">Profile</label> 
        <input type="text" id="profile" class="form-control input-sm" placeholder="profile"> 
       </div> 
      </div> 
     </div> 
    </div> 
    <div class="row"> 
     <input type="submit" class="btn btn-primary" value="Submit form"> 
    </div> 
</form> 

bootply link

回答

2

我看不出有任何理由让他们在单独的模型中,甚至是两种单独的形式。选项卡只是由某些Javascript显示/隐藏的div,因此您可以简单地将“public”字段放在一个div中,将“private”字段放在另一个div中。

<div class="tab-pane" id="general-info"> 
    <div class="field"> 
     {{ form.generalfield1.label_tag }} 
     {{ form.generalfield1 }} 
     {{ form.generalfield1.errors }} 
    </div> 
    ... etc ... 
</div> 
<div class="tab-pane" id="general-info"> 
    <div class="field"> 
     {{ form.privatefield1.label_tag }} 
     {{ form.privatefield1 }} 
     {{ form.privatefield1.errors }} 
    </div> 
    ... etc ... 
</div> 

如果你想要做一个更通用的方法,也许你可以界定公共/私有字段名的视图中的列表:

public_fields = ['name', 'address'] 
private_fields = ['trustworthy', 'bank_details'] 

,检查会员,你遍历:

<div class="tab-pane" id="general-info"> 
    {% for field in form %} 
    {% if field.name in public_fields %} 
    <div class="field"> 
     {{ field.label_tag }} 
     {{ field }} 
     {{ field.errors }} 
    </div> 
    {% endif %} 
    {% endfor %} 
</div> 

+0

我看这就是我最初thought.Thank你! – Apostolos