[英]django adding fields to model form
以下是我的模型
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})
此表單將呈現一個下拉列表,該下拉列表將顯示數據庫中的所有用戶以及一個單選框。
但實際上,我想創建表單,以便我可以添加新用戶(名字,姓氏,用戶名,電子郵件和密碼),然后從abvoe AddStaffForm添加其余字段。
所以問題基本歸結為將userform的字段添加到addstaffform。 然后將它們處理到視圖中。
它是可行的,還是我必須手動完成?
可以擴展上面的模型形式,以便我可以先填寫用戶詳細信息,然后為他分配一個類型?
請讓我知道,謝謝。
使用兩個單獨的表單 - UserForm
,由models.User
和AddStaffForm
創建,但不包括AddStaffForm
的“user”字段。 兩者僅使用一個提交按鈕。
所以你的模板看起來像:
<form method="post" action="/path/to/wherever">
{{ user_form }}
{{ add_staff_form }}
<button>Submit</button>
</form>
然后,當用戶提交表單時,按以下順序獨立處理每個表單:
首先處理用戶表單,並將表單創建的user
實例保存到db。 如果user_form.is_valid()
為True
,則只需執行user = user_form.save()
接下來,處理AddStaffForm
但傳遞commit=False
(即staff = add_staff_form.save(commit=False)
因為它還沒有包含user
字段的值。使用staff.user = user
然后是staff.save()
提供用戶值staff.save()
如果提供了工作人員表單中的所有其他字段(即add_staff_form.is_valid()
否則為True
,這將導致創建寫入db的新staff
實例。
希望這可以幫助。 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.