No se puede asignar “<SimpleLazyObject: >”: “Comment.user” debe ser una instancia de “MyProfile”

Hola, sé que tengo dos problemas aquí. uno es simpleLazyObject problema que puedo solucionarlo de una manera un poco hackish. El otro es “Comment.user” debe ser una instancia de “MyProfile” que no sé cómo solucionar. Creo que en algún lugar en el camino, las cosas se mezclaron.

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) 

No estoy seguro de lo que significa con comment.user debe ser mi instancia de perfil.

En mi aplicación de comentarios, models.py tengo

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

y en mi aplicación de cuentas, models.py tengo

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

No estoy seguro de cómo solucionar este problema, cualquier ayuda será muy apreciada …

El comentario tiene ForeignKey to MyProfile, pero en la línea que activa el error, proporciona un modelo de usuario. La forma correcta sería:

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

Tenga en cuenta que usted utiliza:

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

Y no el campo de identificación. Aunque detrás de escena, django usa el campo id como la clave externa real en la base de datos, en su código usted usa el objeto. Un campo relacional es un descriptor donde django hace la magia para ejecutar una consulta relacional.