2013-06-26 96 views
1

以下是我有Django的添加字段建模形式

class OrgStaff(BaseModel): 
    user = models.OneToOneField(User) 
    member_type = models.BooleanField(help_text="1. Read/Write 0. Read Only") 
    task = models.ForeignKey(ToDos, null=True, blank=True) 
    org = models.ForeignKey(Org) 
    # TODO Add possible activities 

    def __unicode__(self): 
     return self.user.username 

繼模型是表單文件

class AddStaffForm(ModelForm): 

    class Meta: 
     model = OrgStaff 
     exclude = (
      'task', 
      'org' 
      ) 

,這是我如何處理的看法

if request.POST and form.is_valid(): 
    form.save() 
    ret_url = reverse("some_view", kwargs={ 
      'var':var,}) 
    return redirect(ret_url) 
return render(request, "form.html", {"form":form}) 

這種形式會呈現一個下拉菜單,它將顯示數據庫中的所有用戶以及一個收音機框。

但實際上,我想創建表單,這樣我就可以添加一個新用戶(名字,姓氏,用戶名,電子郵件和密碼),然後添加其他字段從AddStaffForm。

所以問題基本歸結爲addform字段添加到addstaffform。 然後將它們處理到視圖中。

它是可行的,還是我必須手動執行?

上述模型表單可以擴展,以便我可以先填寫用戶的細節,然後指定一個類型給他?

請讓我知道,謝謝。

+0

如果按類型,你的意思是'member_type'然後否,任何其他模型,沒有。你必須爲此做一些JavaScript。就像這樣:http://jsfiddle.net/VSRKu/ –

+0

更新,我的基本問題是添加用戶(名,姓,電子郵件,用戶名,密碼等)的字段到上述模型,並能夠自動處理數據在單個視圖中。這創建了OrgStaff,他基本上是一個用戶。 – user2499817

回答

4

使用兩個單獨的形式 - UserForm,創作出來的models.User & AddStaffForm但AddStaffForm排除「用戶」字段。兩個只使用一個提交按鈕。

所以你的模板將是這樣的:

<form method="post" action="/path/to/wherever"> 
    {{ user_form }} 
    {{ add_staff_form }} 
    <button>Submit</button> 
</form> 

然後,當用戶提交表單,流程中的每個表格獨立以下順序:

  1. 處理用戶形成第一和保存由db到表單創建的user實例。如果user_form.is_valid()True,你可以簡單地做user = user_form.save()

  2. 接下來,處理AddStaffForm做到這一點,但通過commit=False(即staff = add_staff_form.save(commit=False)因爲它不包含對user字段的值,只是還沒有。使用staff.user = user提供用戶價值和然後staff.save()

提供在員工形式的所有其他字段提供(即add_staff_form.is_valid()否則True,這將導致在創造一個新的staff我nstance寫入數據庫。

希望這會有所幫助。 :)

+1

感謝您的答案,已經想通過類似的方式http://stackoverflow.com/questions/1727564/how-to-create-a-userprofile-form-in-django-with-first-name-last-name-modificati。 – user2499817

相關問題