2015-09-06 46 views
0

我是Django的新手,我試圖實現一個項目,讓公司可以註冊爲用戶。由於這些公司可能來自不同的國家,並且有不同的公司形式,因此它們在註冊時有不同的強制性領域。這些差異只是信息性的,對行爲沒有任何影響,即所有用戶在註冊後都應該得到平等對待。目前我只需要支持2個國家和2個企業形式,但未來可能會有更多的支持。 我以一個用戶簡介(與用戶一對一的關係)形式開始的單一公司模型,但在這種情況下,我必須將公司形式和國家之間不同的字段設置爲可空,並處理正確的輸入在表格中? 此外,我想在管理員的單個列表中看到所有用戶(公司)。Django:如何爲具有不同必填字段的用戶建模

你會如何在Django中建模?

回答

0

Django在操作領域非常靈活。您可以隨時在字段中添加/刪除required,甚至可以即時從表單中刪除字段。您只需將參數傳遞給窗體構造函數__init__()。這裏有一個簡單的例子:

class BlahForm(forms.ModelForm): 

    class Meta: 
     model = Blah 
     fields = ('field1', 'field2',) 

    def __init__(self, *args, **kwargs): 
     param = kwargs.pop('param', None) 
     super(BlahForm, self).__init__(*args, **kwargs) 

     # how to mark a field as "not required" 
     if param == 'not_required': 
      self.fields['field1'].required = False 
     # here's how to delete a field 
     elif param == 'delete_field': 
      del self.fields['field1'] 

在views.py可以初始化你這樣的形式:

if 'condition1': 
    form = BlahForm(request.POST or None, param='not_required') 
elif 'condition2': 
    form = BlahForm(required.POST or None, param='delete_field') 

你的形式會表現得取決於你傳入該參數,因此你只需要一個形式對於所有國家(如你所說的差異是微不足道的)。希望這可以幫助。

+0

非常感謝您的幫助!這正是我只用一種公司模式尋找方法的原因。我可以傳遞一個標識國家和公司的參數並根據參數定製表單。這只是最後一個問題。我有一些自定義表單域,例如從django口味,這是不同的國家和我不能使用傳遞的參數。 –

+0

我找到了最後一個問題的答案。我也可以根據傳入的參數在__init__中創建相應的字段:[link](http://stackoverflow.com/questions/15086175/django-set-choicefield-in-form-after-creation)。 –