2016-08-13 13 views
0

私は次のような何かをできるようにしたいと思います:だからgiven_namesurnameに渡されるデータは、それぞれfirst_namelast_nameに格納されますDjango - ModelFormのモデルからフィールドの名前を上書きすることはできますか?

class UserForm1(forms.ModelForm): 
    given_name = forms.CharField(column_name='first_name') 
    surname = forms.CharField(column_name='last_name') 

    class Meta: 
     model = User 
     fields = ['username', 'email', 'first_name', 'last_name'] 

答えて

0

必要なものがすべてオーバーライドフィールド属性であれば、新しいフィールドを定義する必要はなく、必要に応じて既存のフィールドをオーバーライドするだけです。

class UserForm1(forms.ModelForm): 
    first_name = forms... # override as per your needs 
    last_name = forms... 

    class Meta: 
     model = User 
     fields = ['username', 'email', 'first_name', 'last_name'] 

しかし、あなたが名前を変更したフィールドを必要とするいくつかの理由であれば、フォームのsave()メソッドをオーバーライドして、保存する前に対応するモデルフィールドに値を割り当てます。この場合、first_namelast_namefieldsから削除することもできます。

fields = ['username', 'email',] 

def save(self, force_insert=False, force_update=False, commit=True, *args, **kwargs): 
    your_model = super(YourForm, self).save(commit=False) 
    your_model.first_name = self.cleaned_data['given_name'] 
    your_model.last_name = self.cleaned_data['surname'] 

    if commit: 
     your_model.save() 
+0

'given'と' surname'を 'fields'リストに含める必要はありませんか? –

+0

モデルに 'given_name'と' surname'フィールドがありますか?はいの場合は、追加することができます。 'fields'は、フォームに表示するモデルのフィールドのリストです。あなたの例から、あなたのモデルは 'first_name'と' last_name'しか持たないと仮定しました。 –

関連する問題