2016-10-28 2 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__' 

Посмотреть

@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')) 

Я стараюсь фи ll информация профиля в виде формы, затем сохранение, но я могу получить новую запись в профиле таблицы, но user_id имеет значение NULL. Я не знаю почему.Нечетный !! Джанго OneToOneField не может сохранить значение внешнего ключа

ответ

0

Поскольку форма не имеет атрибута user. Это должно быть:

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

это работает, спасибо –

Смежные вопросы