簡體   English   中英

django將字段添加到模型表單中

[英]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.UserAddStaffForm創建,但不包括AddStaffForm的“user”字段。 兩者僅使用一個提交按鈕。

所以你的模板看起來像:

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

然后,當用戶提交表單時,按以下順序獨立處理每個表單:

  1. 首先處理用戶表單,並將表單創建的user實例保存到db。 如果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()提供用戶值staff.save()

如果提供了工作人員表單中的所有其他字段(即add_staff_form.is_valid()否則為True ,這將導致創建寫入db的新staff實例。

希望這可以幫助。 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM