2011-11-21 25 views
0

我有一個虛擬的形式,看起來像:複製了從的ModelForm中的字段到表單

class MyForm(forms.Form): 

    class __init__(self, *args, **kwargs): 
     pass 

這裏的是ModelForms和它們各自的模型:

class Person(models.Model): 
    fname = models.CharField(max_length = 255) 
    lname = models.CharField(max_length = 255) 

class Address(models.Model): 
    address = models.CharField(max_length = 255) 
    person = models.ForeignKey(Person) 

class PersonForm(ModelForm): 
    class Meta: 
     model = Person 

class AddressForm(ModelForm): 
    class Meta: 
     model = Address 

我想啓動MyForm這樣的myfrm = MyForm(PersonForm, AddressForm)

我如何可以動態地添加各形式的領域MyForm排除AutoFields和ForeignKey的領域,即MyForm開始將在結束了三場,當 - fnamelnameaddress。這是從一種形式到另一種形式的字段的簡單複製,但我有點迷失了它。

謝謝

回答

2

考慮到上面的模型,只是添加一個字段是不正確的。

Address與人關係有ManyToOne - 用戶可以有多個地址。在這種情況下,更好地看看Django的內聯表單集:

https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#using-an-inline-formset-in-a-view

繁瑣,但是您也可以手動添加一個CharField對人的ModelForm,覆蓋它的保存和處理該字段的內容保存到Address (醜,我不喜歡它)。

0

您可以使用prefix參數將兩個表單放在一個html <form>標記中。然後,您在視圖中做了一些工作,將地址鏈接到該人員。

def my_view(request): 
    if request.method == "POST": 
     person_form = PersonForm(data=request.POST, prefix="person") 
     address_form = AddressForm(data=request.POST, prefix="address") 
     if person_form.is_valid() and address_form.is_valid(): 
      person = person.save() 
      address = address.save(commit=False) 
      address.person = person 
      address.save() 
      return HttpResponseRedirect('/success-url/') 
    ... 
相關問題