2014-01-21 51 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