2016-02-23 2 views
2

Здравствуйте, я знаю, что у меня есть две проблемы. одна проблема simpleLazyObject, которую я могу исправить с помощью своего рода хакерским способом. Другой «Comment.user» должен быть экземпляром «MyProfile», который я не знаю, как исправить. Я думаю, что где-то в пути все перепуталось.Невозможно назначить «<SimpleLazyObject: <User: XXX>>»: «Comment.user» должен быть экземпляром «MyProfile»

def post(request, slug): 
     user = get_object_or_404(User,username__iexact=request.user) 
     try: 
      profile = MyProfile.objects.get(user_id=request.user.id) 
      # if it's a OneToOne field, you can do: 
      # profile = request.user.myprofile 
     except MyProfile.DoesNotExist: 
      profile = None 
     post = get_object_or_404(Post, slug=slug) 
     post.views += 1 # increment the number of views 
     post.save()  # and save it 
     comments = post.comment_set.all() 
     comment_form = CommentForm(request.POST or None) 
     if comment_form.is_valid(): 
      post_instance = comment_form.save(commit=False) 
      post_instance.user = request.user #this is where error is occuring, if I put request.user.id simpleLazyObject dissapears. 
      post_instance.path = request.get_full_path() 
      post_instance.post = post 
      post_instance.save() 

     context_dict = { 
      'post' :post, 
      'profile' :profile, 
      'comments':comments, 
      'comment_form': comment_form 
     } 

     return render(request, 'main/post.html', context_dict) 

Я не уверен, что это значит, что comment.user должен быть экземпляром myprofile.

в моем комментарии приложение, models.py меня

class Comment(models.Model): 
    user = models.ForeignKey(MyProfile) 

и в моей бухгалтерии приложение, models.py меня

class MyProfile(UserenaBaseProfile): 
    user = models.OneToOneField(User, unique=True, verbose_name=_('user'), related_name='my_profile') 

Я не уверен, как решить эту проблему, любая помощь будет высоко оценена ...

ответ

3

Комментарий имеет ForeignKey для MyProfile, но в строке, которая вызывает ошибку, вы предоставляете модель пользователя. Правильный путь будет:

my_p = MyProfile.objects.get(user=request.user) 
post_instance.user = my_p 

Обратите внимание, что вы используете:

MyProfile.objects.get(user=request.user) 

И не поле ID. Хотя за кулисами django использует поле id в качестве реального внешнего ключа в базе данных, в вашем коде вы используете объект. Реляционное поле - это дескриптор, в котором django делает магию для выполнения реляционного запроса.

+0

привет Aviah :) hmmm позвольте мне переварить это ..... – winixxee

+0

эй. Это реляционный ORM –

+0

Прошу прощения, я очень смущен этим правом нет. это не те самые те же самые tihngs? Я пробовал это так, но все равно получаю ту же ошибку ... что мне нужно, чтобы точно изменить? Может быть, я не понимаю это правильно. – winixxee