2009-12-07 26 views
2

我正在使用Modelform for User来编辑first_name和last_name,但我想从UserProfile中创建一个额外的字段(它具有1对1与用户的关系)添加到此。Django:如何启动/收集来自两个模型的字段数据在一个表单定义中

class UserProfileInfoForm(forms.ModelForm): 
    """ Profile Model field specifications for edit. 
    """ 
    class Meta: 
     model = User 
     fields = ('first_name', 'last_name', 'user_phonemobile') 

    first_name = forms.CharField(
          label = _('First name'), 
          max_length = 30, 
          required = True 
          ) 
    last_name = forms.CharField(
          label = _('Last name'), 
          max_length = 30, 
          required = True 
          ) 
    user_phonemobile = forms.CharField(
          label = _('Mobile phone'), 
          max_length = 15, 
          required = False, 
          ) 

我在的ModelForm额外字段(在页面上显示的),但我不能让它与其他模型(用户配置)值填充。一直试图做模型的init,但目前还没有运气。

我可以ofcourse使它成为一个正常的形式,并且在我看来

userdata = request.user.get_profile() 
data = { 
    'first_name': request.user.first_name, 
    'last_name': request.user.last_name, 
    'user_phonemobile': userdata.user_phonemobile, 
    } 
profileinfoform = UserProfileInfoForm(data) 

填充像这样但在未来增加额外的字段时,感觉这样会弄乱我的视图定义。

Regards,

Gerard。

回答

1

我通常只是创建两种形式,每种模式一种。见例如例如this message

+0

嗨akaihola,因为它似乎这种方式会是最简单的。我假设例子中的user_form和profile_form是ModelForms? – GerardJP 2009-12-08 10:38:29

+0

@GerardJP是的。只记得先验证两个,然后保存。 – akaihola 2010-03-04 11:24:29

1

我相信你正在寻找inline formsets。它们专为与相关对象一起工作而设计。

+0

Thanx Ben,我得到了它的工作,但在我的情况下,它感觉就像使用佳能杀死蚊子。编辑多个1对多对象很方便。 由于我只有一对一的关系,还有另一种方法来从我的表单定义中的模型中获取一个字段? – GerardJP 2009-12-07 16:22:20

相关问题