奇!! django OneToOneField无法保存外键值

时间:2016-10-28 18:40:57

标签: python django

用户

"""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__'

查看

@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 为空。我不知道为什么。

1 个答案:

答案 0 :(得分:0)

因为表单没有user属性。它应该是:

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