2015-09-11 5 views
0

Я взламываю Django, поскольку я новичок в нем, чтобы создать сайт, на который пользователь может войти и ответить на некоторые вопросы. Для зарегистрированного пользователя я намерен хранить их имя пользователя, идентификатор вопроса и ответ на вопрос. Тем не менее, после нескольких часов работы я полностью не увенчался успехом. Ниже я дал фрагменты Models.py и Views.pyСохраните конкретные данные пользователя в Django

Models.py - я копирую только UserProfile класса и Userresponse класса, которые необходимы для создания профиля пользователя и таблицы Действия пользователя

# Model class for creating user 
class UserProfile(models.Model): 
    user = models.OneToOneField(User) 
    def __str__(self): 
     return self.user.username 

# Model class for getting user response 
class UserResponse1(models.Model): 
    user = models.ForeignKey(UserProfile, default=0) 
    questoinId = models.ForeignKey(Question) 
    option = models.IntegerField(default=0) 

`` `Views.py` `

def response(request, question_id): 
    q = UserResponse1() 
    if request.user.is_authenticated(): 
     q.user = request.user.username 
     q.questionId_id = question_id 
     q.option +=request.POST['choice'] 
     q.save() 

     # Redisplay the question voting form. 
    return HttpResponseRedirect(reverse('polls:overallResults')) 

Однако, работает над я получаю следующее сообщение об ошибке - Cannot assign "u'abc123'": "UserResponse1.user" must be a "UserProfile" instance.

abc123 - это имя пользователя. Я не могу понять причину этой ошибки. Любая помощь по исправлению этой ошибки, чтобы я мог записать данные в таблицу UserResponse1, будет очень полезной.

Я использую Django 1.8 на Python 2.7

ответ

0

q.user является внешним ключом к UserProfile столу, так что вы должны назначить экземпляр профиля пользователя.

Поскольку у вас есть доступ к пользователю с помощью request.user, вы можете получить доступ к профилю пользователя, используя одно к одному полю.

user_profile = request.user.userprofile 
q.user = user_profile 
+0

все еще получаю ошибку - Невозможно назначить '' ">": "UserResponse1.user" должно быть "UserProfile" instance''. Возможно ли определить объект '' user'' так, чтобы он просто «' имя пользователя », а не« пользователь » – Pawan

+0

Извините, моя ошибка, я неправильно прочитал ваши модели. Вам нужно назначить профиль пользователя, а не пользователя. Я обновил свой ответ. Нет, невозможно назначить использование строки имени пользователя, вам нужно назначить экземпляр (или его идентификатор). – Alasdair

+0

Спасибо за вашу помощь, но я все еще не уверен, что происходит неправильно, при реализации вашего предложения ошибка: «Исключение: пользователь не имеет userpfrofile'' – Pawan

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