0

ビュー.py

if pform.is_valid():
    user = pform.save()

フォーム.py

class UserProfileForm(forms.ModelForm):
    sex = forms.CharField(max_length = 20,label="I am :",widget=forms.Select(choices=SEX_CHOICES,attrs = {'class':''}),required = False)
    first_name = forms.CharField(max_length = 50,widget = forms.TextInput(attrs={'placeholder':'Please enter your real name.','class':''}),required = False)
    last_name = forms.CharField(max_length = 50,widget = forms.TextInput(attrs={'placeholder':'Enter last name.','class':''}),required = False)
    location = forms.CharField(max_length = 50,widget = forms.TextInput(attrs={'placeholder':'Enter your current location','class':''}),required = False)
    def clean_first_name(self):
        first_name = self.cleaned_data['first_name']
        if first_name == '':
            raise forms.ValidationError("This field is required.")
        return first_name
    def clean_phone(self):
        phone = self.cleaned_data['phone']
        if phone == '':
            raise forms.ValidationError("This field is required.")
        return phone

    def clean_last_name(self):
        last_name = self.cleaned_data['last_name']
        if last_name == '':
            raise forms.ValidationError("This field is required.")
        return last_name

    def clean_profession(self):
        profession = self.cleaned_data['profession']
        if profession == "":
            raise forms.ValidationError("Select a valid option.")
        return profession

    def clean_sex(self):
        sex = self.cleaned_data['sex']
        if sex == "":
            raise forms.ValidationError("Select a valid option.")
        return sex

    def __init__(self,*args,**kw):
        super(UserProfileForm,self).__init__(*args,**kw)
        self.phone = self.instance.get_profile().phone
        self.profession = self.instance.get_profile().profession
        self.sex = self.instance.get_profile().sex
        self.location = self.instance.get_profile().location        

    def save(self,*args,**kw):
        self.instance.first_name = self.cleaned_data.get("first_name")
        self.instance.last_name = self.cleaned_data.get("last_name")
        self.instance.get_profile().sex = self.cleaned_data.get("sex")
        self.instance.get_profile().location = self.cleaned_data.get("location")
        self.instance.get_profile().profession = self.cleaned_data.get("profession")
        self.instance.get_profile().phone = self.cleaned_data.get("phone")
        self.instance.save()
        return self.instance

    class Meta:
        model = User
        fields = ('first_name','last_name','phone','sex','profession','location')
        #exclude = ('email')

疑問に思う

すべて正常に動作していますが、 を使用すると、情報をユーザー プロファイルに保存できませself.instance.get_profile().phone = self.cleaned_data.get('#some_field')ん。データを取得するときに m フォームに表示されないため、助けてください。よろしくお願いします

4

2 に答える 2

1

私があなたをよく理解しているなら、あなたはフォームからデータを取得し、それをユーザープロファイルに保存することはできません。これを修正するには、ユーザープロファイルも保存する必要があります。

def save(self,*args,**kw):
    self.instance.first_name = self.cleaned_data.get("first_name")
    self.instance.last_name = self.cleaned_data.get("last_name")
    profile = self.instance.get_profile()
    profile.sex = self.cleaned_data.get("sex")
    profile.location = self.cleaned_data.get("location")
    profile.profession = self.cleaned_data.get("profession")
    profile.phone = self.cleaned_data.get("phone")
    profile.save()
    self.instance.save()
    return self.instance
于 2012-08-27T06:47:37.057 に答える
0

#フィールドを取得するときに a を使用しないでください。代わりにこれを行います:

self.cleaned_data.get('some_field')
于 2012-08-27T01:05:06.030 に答える