2016-12-23 14 views
0

を働いていないと同時に、onetononeリンクフォームを保存し、私は次の形式を持っていました:ジャンゴ -

class UpdateProfile(forms.ModelForm): 
    username = forms.CharField(required=True) 
    email = forms.EmailField(required=True) 
    first_name = forms.CharField(required=True) 
    last_name = forms.CharField(required=True) 

    class Meta: 
     model = User 
     fields = ('username', 'email', 'first_name', 'last_name') 

    def clean_email(self): 
     username = self.cleaned_data.get('username') 
     email = self.cleaned_data.get('email') 

     if email and User.objects.filter(email=email).exclude(username=username).count(): 
      raise forms.ValidationError('This email address is already in use. Please supply a different email address.') 
     return email 

class UserDetailForm (forms.ModelForm): 
    linked_user = forms.CharField (required = True) 
    linked_password = forms.CharField (required = True, widget = forms.PasswordInput()) 
    connections = forms.IntegerField (required = True) 

    class Meta: 
     model = User_detail 
     fields = ('linked_user','linked_password','connections') 

私は両方とも有効に使用している場合、同時にそれらを保存しようとしている:

if request.method == 'POST': 
     form = UpdateProfile(request.POST, instance=request.user) 
     linked_form = UserDetailForm(request.POST, instance=request.user) 
     if all((form.is_valid(),linked_form.is_valid())): 
      user = form.save() 
      linked = linked_form.save(commit=False) 
      linked.user = user 
      linked.save() 
      msg = "Profile Updated" 
     else: 
      return error(request) 

これはUser_detailモデルです:

class User_detail (models.Model): 
    user = models.OneToOneField (
     User, 
     on_delete = models.CASCADE 
     ) 
    linked_user = models.CharField (
     verbose_name = 'LinkedIn Username', 
     max_length = 50, 
    ) 
    linked_password = models.CharField (
     max_length = 50,         
     verbose_name = 'LinkedIn Password', 
    ) 
    connections = models.IntegerField (
     verbose_name = 'Connections per day', 
     default = 24, 
    ) 
    def __unicode__(self): 
     return u'%s' % (self.user.first_name + ' ' + self.user.last_name) 

最初の形式は、保存されている第二ではありませんし、私はミスだか理解していません

大変助けになりました。

+0

エラーはありますか?もしそうなら、それを投稿できますか? –

+0

エラーはありません。それはそれが救われたと言って戻ってくる。最初のフォームは更新されます( 'user = form.save()'); 2番目の(linked_form)はしません。 – HenryM

答えて

1

問題はlinked_form = UserDetailForm(request.POST, instance=request.user)にあります。 request.userはモデルUser_detailのインスタンスではありません。

何が起こっているのですか、djangoはモデル内のインスタンスを見つけようとしていて、何も見つけようとしていません。 dhangoがそのインスタンスを更新できるように、有効なUser_detailインスタンスを提供する必要があります。

参考:save() method