2016-10-28 5 views
0

ユーザー

"""The user model is the default model of django""" 

モデル

class UserProfile(models.Model): 

    # user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True) 

    # !!!!!!!!!---here OneToOne Field--!!!!!!!!!! 
    user = models.OneToOneField(User, on_delete=models.CASCADE, null=True, blank=True) 

    description = RichTextField(max_length=140, default='') 
    avatar = models.CharField(max_length=50, default=_random_avatar, null=True) 
    home_url = models.URLField(blank=True, null=True) 
    github_url = models.URLField(blank=True, null=True) 
    linkedin_url = models.URLField(blank=True, null=True) 
    stackoverflow_flair = RichTextField(blank=True, null=True) 
    is_user = models.BooleanField(default=False) 
    is_public = models.BooleanField(default=False) 

フォーム

class ProfileForm(ModelForm): 
    class Meta: 
     model = UserProfile 
     fields = '__all__' 

ビュー

私はFiにしようと
@login_required 
def index(request): 
    """ Notice, the profile.html is composited by 2 sections, user and profile 
     So, setter and getter all are 2 group, too 
    """ 
    info = None 
    if request.user.is_authenticated: 
     user = request.user 
     if request.method == 'POST': 
      form = ProfileForm(request.POST) 
      if form.is_valid(): 
       # link to user 
       form.user = user 
       form.save() # <------here, can't save the user_id, why? 
     else: 
      form = ProfileForm() 

     # here, queryset allways is null <------- 
     profile = UserProfile.objects.filter(user_id=user.id) 

     return render(request, 'account/profile.html', {'user': user, 'profile': profile, 'form': form}) 
    else: 
     return redirect(reverse('account_login')) 

フォームビューのプロファイル情報を保存しておきますが、テーブルプロファイルで新しいレコードを取得できますが、user_idはnullです。どうしてか分かりません。Odd !!ジャンゴOneToOneFieldは、外部キーの値を保存することはできません

答えて

0

フォームにはuserという属性がないため、それは:

if form.is_valid(): 
    obj = form.save(commit=False) 
    obj.user = user 
    obj.save() 
+0

それは、ありがとう –

関連する問題